У меня есть такие строки:
"my value1" => my value1 "my Value2" => my Value2 myvalue3 => myvalue3
Мне нужно избавиться от "
двойных кавычек» в конце и в начале, если они существуют, но если в String есть такой символ, тогда он должен быть оставлен там. Пример:
"my " value1" => my " value1
Как я могу это сделать в PHP – есть ли функция для этого или я должен сам ее кодировать?
trim($string,'"');
вот источник
У меня была аналогичная потребность, и я написал функцию, которая удалит лидирующие и завершающие одиночные или двойные кавычки из строки:
/** * Remove first and end quote from a quoted string of text * * @param mixed $text */ function stripQuotes($text) { $unquoted = preg_replace('/^(\'(.*)\'|"(.*)")$/', '$2$3', $text); return $unquoted; }
Это приведет к выводам, перечисленным ниже:
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 '"'"@";'"*&^*'' => "'"@";'"*&^*'
trim
удалит все экземпляры символа из начала и конца, если он соответствует шаблону, который вы предоставляете, так что:
$myValue => '"Hi"""""'; $myValue=trim($myValue, '"');
Станет:
$myValue => 'Hi'.
Вот способ удалить только первый и последний символы, если они совпадают:
$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);
Столько, сколько этот поток должен был быть убит давно, я не мог не ответить тем, что я назвал бы самым простым ответом. Я заметил, что эта тема вновь появляется на 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 '"'"@";'"*&^*'' => "'"@";'"*&^*'
Это только когда-либо удаляет первую и последнюю цитату, она не повторяется, чтобы удалить дополнительный контент и не заботится о совпадении концов.
Вам нужно использовать регулярные выражения, посмотрите: –
http://php.net/manual/en/function.preg-replace.php
Или вы могли бы в этом случае использовать substr, чтобы проверить, является ли первый, а затем последний символ строки меткой кавычки, если она есть, усечь строку.
Как насчет регулярного выражения
//$singleQuotedString="'Hello this 'someword' and \"somewrod\" stas's SO"; //$singleQuotedString="Hello this 'someword' and \"somewrod\" stas's SO'"; $singleQuotedString="'Hello this 'someword' and \"somewrod\" stas's SO'"; $quotesFreeString=preg_replace('/^\'?(.*?(?=\'?$))\'?$/','$1' ,$singleQuotedString);
Вывод
Hello this 'someword' and "somewrod" stas's SO
Если вам нравится производительность по ясности, это так:
// 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);
Комментарий помогает с ясностью … скобки в массиве, как использование в строках, возможно и требуют меньше усилий по обработке, чем эквивалентные методы, слишком плохо, что не существует переменной длины или последнего индекса символа