2012-03-16 4 views
23

У меня есть строки как эти:Удалить цитаты из начала и конца строки в PHP

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

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

"my " value1" => my " value1 

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

+0

Что делать в случае с символом '" "Hello" World? "?? –

+0

" "Hello" World "" => "Hello" World " – newbie

ответ

60
trim($string,'"'); 

here is the source

+0

Хорошая функция, но OP хочет оставить« в центре и только удалить в начале и в конце ... – MakuraYami

+14

Это именно то, что делает обрезка. – PatrikAkerstrand

+1

Если второй символ также «» или предпоследний, то это также будет лишено. Если они значительны, то обрезка падает. немного зависит от фактических данных. См. ответ от пользователя783322. – Purpletoucan

0

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

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

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

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

+1

Или он мог бы просто обрезать строку. – PatrikAkerstrand

+0

Вы определенно не ** нуждаетесь ** в регулярном выражении. –

+0

Trim может в конечном итоге удалить значительные кавычки в начале или конце строки - я поддерживаю регулярные выражения! – Purpletoucan

7

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

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

//$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 
9

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

/** 
* 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 
'"'"@";'"*&^*'' => "'"@";'"*&^*' 
2

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

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

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

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

Смежные вопросы