2009-06-19 4 views
4

В строке, содержащей кавычки, я всегда получаю дополнительные пробелы перед конечной цитатой. НапримерОбрезка пробела

"это тест" (строка включает в кавычки)

Обратите внимание на пробел после теста но перед конец цитаты. Как я мог избавиться от этого пространства?

Я пробовал rtrim, но он просто применяется для символов в конце строки, очевидно, этот случай не в конце.

Любые подсказки? Спасибо

+0

qoutes всегда в начале и конце строки? – Zenshai

+0

Да, пока все время находится в начале и конце – 2009-06-19 18:39:38

ответ

3

Вот еще один способ, который соответствует только последовательности пространств и котировку на конце из a string ...

$str=preg_replace('/\s+"$/', '"', $str); 
1

Вы можете удалить цитаты, обрезать, а затем добавить цитаты обратно.

3

Ну, избавитесь от кавычек, затем обрезайте, а затем верните кавычки.

Давайте сделаем чистую функцию для этого:

<?php 

function clean_string($string, $sep='"') 
{ 
    // check if there is a quote et get rid of them 
    $str = preg_split('/^'.$sep.'|'.$sep.'$/', $string); 

    $ret = ""; 

    foreach ($str as $s) 
     if ($s) 
     $ret .= trim($s); // triming the right part 
     else 
     $ret .= $sep; // putting back the sep if there is any 

    return $ret; 

} 

$string = '" this is a test "'; 
$string1 = '" this is a test '; 
$string2 = ' this is a test "'; 
$string3 = ' this is a test '; 
$string4 = ' "this is a test" '; 
echo clean_string($string)."\n"; 
echo clean_string($string1)."\n"; 
echo clean_string($string2)."\n"; 
echo clean_string($string3)."\n"; 
echo clean_string($string4)."\n"; 

?> 

Выходы:

"this is a test" 
"this is a test 
this is a test" 
this is a test 
"this is a test" 

Эта ручка струнам не цитата, с одной цитатой только в начале/конце и полностью цитировал. Если вы решите взять «» в качестве разделителя, вы можете просто передать его в качестве параметра.

+0

+1 для усилий, удобочитаемости и тестовых примеров. – karim79

1

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

$string = 'Here is a string: "this is a test "'; 
preg_replace('/"\s*([^"]+?)\s*"/', '"$1"', $string); 
0

Функция rtrim принимает второй параметр, который позволит вам указать, какие символы вы хотите обрезать. Так что, если вы добавите цитату по умолчанию, вы можете обрезать все пробелы и любые кавычки, а затем повторно добавить свой конец цитаты

$string = '"This is a test "' . "\n"; 
$string = rtrim($string," \t\n\r\0\x0B\"") . '"'; 
echo $string . "\n"; 
1

PHP имеет несколько встроенных функций, которые делают это. Look here.