-4
$in = $_GET['in'];
print $in;

当我输入?in=<<<它时它会打印出来<<<。但是当你这样做时,?in=<<<A它只会打印出来<<并且<A部分丢失。这种特殊性的解释是什么?我知道那<<T_LS并且<<<T_START_HEREDOC,但不知何故我不明白那<A是怎么消失的。

编辑:对不起,我暂时感到困惑。我的困惑来自这样一个事实,即当我评估代码时

eval("\$out = $in");

并输入?in=<<<A\nout\nA;\n我得到一个 T_LS 语法错误。

抱歉我的轻率问题。模组可以删除或关闭此帖子。

4

2 回答 2

2

浏览器将 解释<A为打开的 HTML 标记,因此不会在页面上显示它,但它仍然存在于源代码中。

这与作为 heredoc 或任何其他 PHP 语法无关,因为 PHP 将其打印为字符串,而不是执行它。

于 2013-01-08T11:22:34.457 回答
1

就像我编辑了你的问题一样。<<<Ais<<和锚标记的开始<A。所以在输出中你看不到它,因为它创建了一个格式错误的 html。您应该使用htmlentities()函数

$data = "<<<A";
echo htmlentities($data);
于 2013-01-08T11:22:17.993 回答