我已经搜索过,但似乎我是唯一一个遇到这个问题的人。所以我想从这个$ _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
每次打印出原始字符串(第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);
我还尝试在一个全新的文档中执行此操作,我没有任何“清理”脚本或任何其他脚本仍然无法解决它...
答案 0 :(得分:3)
您必须先使用urldecode()
解码此var。它会将url实体更改为实际字符。
尝试替换为普通字符串str_replace(array("\\r\\n", "\\r", "\\n"), "<br>", $name);
它将替换文字,例如\n
,而不是new line
。
答案 1 :(得分:2)
我怀疑这是因为发送的字符字面上'\ n'不是换行符。
GET请求应该类似于First+line%0ASecond+line
;
如果您无法更改请求,可以更改替换以转义斜杠:
print str_replace(array("\\r\\n", "\\r", "\\n"), "<br>", $name);
答案 2 :(得分:0)
使用urldecode()
函数将解码后的URL作为字符串返回。:
<?php
echo urldecode('Line%201\nLine%202\rLine%203\r\nLine%204');
?>