nl2br или str_replace не работают для переменной $_GET
Я искал и искал, но, кажется, я единственный, кто имеет эту проблему. Поэтому я хочу преобразовать разрывы строк из этой переменной $_GET. Итак, это мой URL:
test.php?name=Line%201\nLine%202\rLine%203\r\nLine%204
В моем коде я попытался:
print nl2br($_GET['name']); //doesn't work
Я также попробовал:
print str_replace(array("\r\n", "\r", "\n"), "<br>", $name); //doesn't work
Каждый раз, когда она печатает исходную строку (строка 1\nLine 2\rLine 3\r\nLine 4\n) без изменений. Однако, если я попробую это с переменной, которая не передана в это всегда работает. Например:
$other = "Line 1\nLine 2\rLine 3\r\nLine 4\n";
print `nl2br($_GET['name']);
print str_replace(array("\r\n", "\r", "\n"), "<br>", $other);
Я также попытался сделать это в совершенно новом документе, где у меня нет никаких сценариев "дезинфекции" или каких-либо других сценариев, которые я до сих пор не могу обойти...
3 ответа
Я подозреваю, что это потому, что отправленные символы буквально '\n' не являются новой строкой.
GET-запрос, вероятно, должен быть что-то вроде First+line%0ASecond+line
;
Если вы не можете изменить запрос, вы можете изменить замену, чтобы избежать косой черты:
print str_replace(array("\\r\\n", "\\r", "\\n"), "<br>", $name);
Вы должны сначала декодировать эту переменную, используя urldecode()
, Это изменит URL-адреса сущностей на реальные символы.
Попробуйте заменить как обычные строки str_replace(array("\\r\\n", "\\r", "\\n"), "<br>", $name);
Он заменит буквальный например \n
не new line
,
Использование urldecode()
функция, которая возвращает декодированный URL-адрес в виде строки.:
<?php
echo urldecode('Line%201\nLine%202\rLine%203\r\nLine%204');
?>