Удалить кавычки из начала и конца строки в PHP - PullRequest
36 голосов
/ 16 марта 2012

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

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

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

"my " value1" => my " value1

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

Ответы [ 8 ]

87 голосов
/ 16 марта 2012
trim($string,'"');

вот источник

13 голосов
/ 18 августа 2014

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

/**
 * 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
'"'"@";'"*&^*'' => "'"@";'"*&^*'
7 голосов
/ 16 марта 2012

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);
4 голосов
/ 24 августа 2014

Столько, сколько эта ветка должна была быть убита давно, я не мог не ответить тем, что я бы назвал самым простым ответом из всех. Я заметил, что эта тема вновь появляется 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
'"'"@";'"*&^*'' => "'"@";'"*&^*'

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

0 голосов
/ 10 мая 2018

Это старый пост, но для обслуживания многобайтовых строк есть как минимум два возможных маршрута, по которым можно следовать. Я предполагаю, что удаление кавычек выполняется, потому что кавычка рассматривается как переменная программы / 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;
}
0 голосов
/ 31 марта 2017

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

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

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

0 голосов
/ 03 апреля 2012

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

//$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   
0 голосов
/ 16 марта 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...