1

我已经搜索和搜索,但似乎我是唯一有这个问题的人。所以我想从这个 $_GET 变量转换换行符。所以这是我的网址:

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

每次它打印出原始字符串 (Line 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);

我也尝试在一个完全新的文档中执行此操作,我没有任何“清理”脚本或任何其他脚本仍然无法绕过它......

4

3 回答 3

3

您必须首先使用urldecode(). 它将 url 实体更改为实际字符。

尝试替换为普通字符串str_replace(array("\\r\\n", "\\r", "\\n"), "<br>", $name); 它将替换文字,例如\n,而不是new line

于 2013-10-15T10:38:51.643 回答
2

我怀疑这是因为发送的字符实际上是 '\n' 而不是换行符。

GET 请求可能应该是这样的First+line%0ASecond+line

如果您无法更改请求,则可以更改替换以转义斜杠:

print str_replace(array("\\r\\n", "\\r", "\\n"), "<br>", $name);
于 2013-10-15T11:01:33.160 回答
0

使用urldecode()将解码后的 URL 作为字符串返回的函数。:

<?php

echo urldecode('Line%201\nLine%202\rLine%203\r\nLine%204'); 

?>
于 2013-10-15T10:42:01.417 回答