2011-12-25 8 views
1

Я беру данные из формы textarea и помещаю ее в длинную строку. Input, как это:не удаляет пробелы в строке

Country: France 

City: Paris 

Street: Champ 

Затем поместите его в длинной линии:

$line = $_POST['input']; 

сейчас, мне нужно заменить пробелы и новые строки с <SP> and <BR>, поэтому я делаю это:

$line = str_replace(" ","&ltSP&gt",$line); 
$line = str_replace("\n","&ltBR&gt",$line); 

, но я получаю это:

Country:<SP>France <BR> <BR>City:<SP>Paris <BR> <BR>Street:<SP>Champ 

Теперь, если Insted из \ п я попытался это:

$line = str_replace("\r","&ltBR&gt",$line); 

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

$line = str_replace(" ","",$line); 

но он остается неизменным.

Мой весь код:

$line = str_replace(" ","&ltSP&gt",$line); 
$line = str_replace("\n","&ltBR&gt",$line); 
$line = str_replace(" ","",$line); 
echo $line; 

Как удалить пробелы в этом случае?

Редактировать: Я сделал bin2hex и узнал, что пространство на самом деле является каретой return \ r. Так что это решение:

$line = str_replace("\r","",$line); 

Почему \ г ведут себя как пространство в этом случае?

+1

Вы уверены, что ваша строка - одна длинная линия, или она действительно многострочная? Вы также можете иметь дело со специальными символами пробела, такими как неразрывное пространство. – BoltClock

+0

попробуйте заменить ' ' на "". т.е. '$ line = str_replace ("   "," ", $ line);' – Virendra

+2

Используйте hexdump своей строки, чтобы действительно узнать, с какими символами вы имеете дело, см. [Как я могу получить шестнадцатеричный дамп строки в PHP?] (http://stackoverflow.com/questions/1057572/how-can-i-get-a-hex-dump-of-a-string-in-php) – hakre

ответ

1

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

<?php 

// example string data 
$str = "key1 value1 key2 value2 key3 value3"; 

// clean string 
$str = str_replace("&nbsp", " ",$str); 
$str = str_replace("\n", " ", $str); 
$str = str_replace("\r", " ", $str); 

$arr = explode(" ", $str); 
$out = "<ul>"; 
$cnt = 1; 

foreach($arr as &$val) { 
    if ($cnt++ % 2 == 0) { 
     continue; 
    } else { 
     $out = $out . "<li>" . $val . ": " . current($arr) . "</li>"; 
    } 
} 

$out = $out . "</ul>"; 

echo $out; 

// output source 
// <ul><li>key1: value1</li><li>key2: value2</li><li>key3: value3</li></ul> 

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