当我发现这个奇怪的错误/功能时,我正在调试MySQL查询:
echo 'a'.'a'; // aa
echo 'a'.'<a'; // a (expecting a<a)
echo 'a'.'<a>'; // a<a>
echo 'a'.'<'; // a<
为什么PHP表现得像这样?我在SO上发现了一些类似的问题,这些问题与将HTML作为文本输出而不进行编码有关。我正在查看输出为文本,而不是HTML,而<a
仍然没有出现。
我在运行PHP 5.3或5.4的两个不同的PHP环境中尝试了这一点,它们都表现得这样。
如果有帮助,这就是让我发现错误/功能的行:
$query.=' FROM links WHERE '.$results[0]['date'].'<date ';
修改: 阅读问题,人们。
我将输出视为字符串,而不是HTML。如果PHP自动解析字符串文字,那么PHP就会出现严重问题。
对于推荐<
的人,为什么你希望它适用于MySQL。
编辑2:忘记浏览器。
我在Windows CMD中运行它,它正在输出我上面输入的内容。如果您确信我是愚蠢的并且我没有看到<a
,因为我将其视为HTML,请阅读问题,您会看到echo 'a'.'<a>';
输出{{1} }。
我刚刚在http://writecodeonline.com/php/上尝试过,而a<a>
正按预期显示。好像它与我的电脑有关,我正在使用WampServer 2.4。
答案 0 :(得分:3)
把它放在这里,因为它在评论中会非常难看。这直接来自PHP-cli:
php > echo 'a'.'a'; // aa
aa
php > echo 'a'.'<a'; // a (expecting a<a)
a<a
php > echo 'a'.'<a>'; // a<a>
a<a>
php > echo 'a'.'<'; // a<
a<
它实际上是上面代码的剪切和粘贴,正如您所看到的,您期望的是PHP输出的确切内容。
如果你没有得到这个,那么你正在做一些不同的事情。
答案 1 :(得分:0)
尝试使用<
<
echo 'a'.'<a';
答案 2 :(得分:0)
我遇到了一个非常相似的行为,在此行为中,使用concat运算符会删除内容,顺便说一下也是从<开始。 apache错误日志显示该脚本导致了分段错误。
我无法在测试脚本中复制它,所以我发现concat操作问题不是问题的根源,而是症状。
事实证明,我们早些时候在同一脚本中通过PECL ssh2进行了操作,这导致了段错误并随后弄乱了以后发生的事情。
所以我的建议是检查错误日志并查找问题的间接原因。