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

?>
Другие вопросы по тегам