Подтвердить что ты не робот

Удалить цитаты из начала и конца строки в PHP

У меня есть строки, подобные этим:

"my value1" => my value1
"my Value2" => my Value2
myvalue3 => myvalue3 

Мне нужно избавиться от " (двойных кавычек) в конце и в начале, если они существуют, но если в String есть такой символ, тогда он должен быть оставлен. Пример:

"my " value1" => my " value1

Как я могу это сделать в PHP - есть ли функция для этого или я должен сам ее кодировать?

4b9b3361

Ответ 2

У меня была похожая потребность, и я написал функцию, которая удаляет начальные и конечные одинарные или двойные кавычки из строки:

/**
 * Remove the first and last quote from a quoted string of text
 *
 * @param mixed $text
 */
function stripQuotes($text) {
  return preg_replace('/^(\'(.*)\'|"(.*)")$/', '$2$3', $text);
} 

Это даст результаты, перечисленные ниже:

Input text         Output text
--------------------------------
No quotes       => No quotes
"Double quoted" => Double quoted
'Single quoted' => Single quoted
"One of each'   => "One of each'
"Multi""quotes" => Multi""quotes
'"'"@";'"*&^*'' => "'"@";'"*&^*'

Ответ 3

trim удалит все экземпляры char с начала и конца, если он соответствует шаблону, который вы предоставляете, поэтому:

$myValue => '"Hi"""""';
$myValue=trim($myValue, '"');

Станет:

$myValue => 'Hi'.

Здесь можно удалить только первый и последний char, если они совпадают:

$output=stripslashes(trim($myValue));

// if the first char is a " then remove it
if(strpos($output,'"')===0)$output=substr($output,1,(strlen($output)-1));

// if the last char is a " then remove it
if(strripos($output,'"')===(strlen($output)-1))$output=substr($output,0,-1);

Ответ 4

Так как этот поток должен был быть убит давно, я не мог не ответить тем, что я назвал бы самым простым ответом. Я заметил, что эта тема вновь появляется на 17-м, поэтому я не чувствую себя так же плохо.:)

Использование образцов, предоставленных Стивом Чемберсом;

echo preg_replace('/(^[\"\']|[\"\']$)/', '', $input);

Результат ниже;

Input text         Output text
--------------------------------
No quotes       => No quotes
"Double quoted" => Double quoted
'Single quoted' => Single quoted
"One of each'   => One of each
"Multi""quotes" => Multi""quotes
'"'"@";'"*&^*'' => "'"@";'"*&^*'

Это только когда-либо удаляет первую и последнюю цитату, она не повторяется, чтобы удалить дополнительный контент и не заботится о совпадении концов.

Ответ 5

Вам нужно использовать регулярные выражения, посмотрите: -

http://php.net/manual/en/function.preg-replace.php

Или вы могли бы в этом случае использовать substr, чтобы проверить, является ли первый, а затем последний символ строки меткой кавычки, если она есть, усечь строку.

http://php.net/manual/en/function.substr.php

Ответ 6

Как насчет регулярного выражения

//$singleQuotedString="'Hello this 'someword' and \"somewrod\" stas SO";
//$singleQuotedString="Hello this 'someword' and \"somewrod\" stas SO'";
$singleQuotedString="'Hello this 'someword' and \"somewrod\" stas SO'";

$quotesFreeString=preg_replace('/^\'?(.*?(?=\'?$))\'?$/','$1' ,$singleQuotedString);

Выход

Hello this 'someword' and "somewrod" stas SO   

Ответ 7

Это старый пост, но для обслуживания многобайтовых строк есть два возможных маршрута. Я предполагаю, что удаление кавычек выполняется, потому что кавычка рассматривается как переменная программы /INI и, следовательно, является ЛИБО "чем-то" или "чем-то другим", но НЕ "смешанными кавычками". Кроме того, НИЧЕГО между соответствующими кавычками должно быть сохраняется нетронутым
Маршрут 1 - использование регулярных выражений

function sq_re($i) {
    return preg_replace( '#^(\'|")(.*)\1$#isu', '$2', $i );
}

Это использует \1 для совпадения с той же кавычкой, что и в начале. модификатор u, делает его способным к UTF8 (хорошо, не полностью многобайтовая поддержка)


Маршрут 2 - использование функций mb_ *

function sq($i) {
    $f = mb_substr($i, 0, 1);
    $l = mb_substr($i, -1);
    if (($f == $l) && (($f == '"') || ($f == '\'')) ) $i = mb_substr($i, 1, mb_strlen( $i ) - 2);
    return $i;
}

Ответ 8

Если вам нравится производительность по ясности, это способ:

// Remove double quotes at beginning and/or end of output
$len=strlen($output);
if($output[0]==='"') $iniidx=1; else $iniidx=0;
if($output[$len-1]==='"') $endidx=-1; else $endidx=$len-1;
if($iniidx==1 || $endidx==-1) $output=substr($output,$iniidx,$endidx);

Комментарий помогает с ясностью... скобки в массиве, как использование в строках, возможно и требуют меньше усилий по обработке, чем эквивалентные методы, слишком плохо, что нет переменной длины или последнего индекса char