【发布时间】:2014-02-15 00:05:22
【问题描述】:
当我发现这个奇怪的错误/功能时,我正在调试 MySQL 查询:
echo 'a'.'a'; // aa
echo 'a'.'<a'; // a (expecting a<a)
echo 'a'.'<a>'; // a<a>
echo 'a'.'<'; // a<
为什么 PHP 会这样?我发现了一些类似的问题,与将 HTML 输出为文本而不进行编码有关。我将输出视为文本,而不是 HTML,<a 仍然没有出现。
我在运行 PHP 5.3 或 5.4 的 2 个不同的 PHP 环境中进行了尝试,它们的行为都是这样的。
如果有帮助,以下是让我发现错误/功能的那一行:
$query.=' FROM links WHERE '.$results[0]['date'].'<date ';
编辑: 阅读问题,人们。
我将输出视为字符串,而不是 HTML。如果 PHP 自动解析字符串字面量,那么 PHP 就存在严重问题。
对于推荐&lt; 的人来说,你为什么希望它适用于 MySQL。
编辑 2:忘记浏览器。
我在 Windows CMD 中运行了它,它输出的正是我在上面输入的内容。如果您确信我很愚蠢并且我没有看到 <a 因为我将其视为 HTML,请阅读问题,您会看到 echo 'a'.'<a>'; 输出 a<a>。
我刚刚在http://writecodeonline.com/php/ 上尝试过,<a 正在按预期显示。好像和我的电脑有关,我用的是 WampServer 2.4。
【问题讨论】:
-
因为它呈现html,所以在它前面加上
<pre>或viewsource。 -
您是否使用浏览器执行脚本?然后,您的浏览器正试图将其解释为 HTML...
-
阅读问题。为什么我要在 MySQL 查询中使用
<pre>? -
我对你的问题有点困惑。对我来说,您似乎想回显 sql 字符串以验证它是否正在执行您想要的操作。如果您只是在调试它,请使用“
";”。 htmlspecialchars($sql)." -
然后显示您正在生成的实际查询,以及您收到的确切错误消息。如果您不向我们提供完整的图片,我们将无法为您提供帮助。
标签: php