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

У меня есть такие строки:

"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, чтобы проверить, является ли первый, а затем последний символ строки меткой кавычки, если она есть, усечь строку.

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

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

 //$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); 

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