【问题标题】:Strange behavior with PHP string concatenationPHP字符串连接的奇怪行为
【发布时间】: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,&lt;a 仍然没有出现。

我在运行 PHP 5.3 或 5.4 的 2 个不同的 PHP 环境中进行了尝试,它们的行为都是这样的。

如果有帮助,以下是让我发现错误/功能的那一行:

$query.=' FROM links WHERE '.$results[0]['date'].'<date ';

编辑: 阅读问题,人们。

我将输出视为字符串,而不是 HTML。如果 PHP 自动解析字符串字面量,那么 PHP 就存在严重问题。

对于推荐&amp;lt; 的人来说,你为什么希望它适用于 MySQL。

编辑 2:忘记浏览器。

我在 Windows CMD 中运行了它,它输出的正是我在上面输入的内容。如果您确信我很愚蠢并且我没有看到 &lt;a 因为我将其视为 HTML,请阅读问题,您会看到 echo 'a'.'&lt;a&gt;'; 输出 a&lt;a&gt;

我刚刚在http://writecodeonline.com/php/ 上尝试过,&lt;a 正在按预期显示。好像和我的电脑有关,我用的是 WampServer 2.4。

【问题讨论】:

  • 因为它呈现html,所以在它前面加上&lt;pre&gt;或viewsource。
  • 您是否使用浏览器执行脚本?然后,您的浏览器正试图将其解释为 HTML...
  • 阅读问题。为什么我要在 MySQL 查询中使用 &lt;pre&gt;
  • 我对你的问题有点困惑。对我来说,您似乎想回显 sql 字符串以验证它是否正在执行您想要的操作。如果您只是在调试它,请使用“
    ”。 htmlspecialchars($sql)."
    ";
  • 然后显示您正在生成的实际查询,以及您收到的确切错误消息。如果您不向我们提供完整的图片,我们将无法为您提供帮助。

标签: php


【解决方案1】:

把它放在这里,因为它在评论中会非常难看。这是直接来自 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 输出的内容。

如果你没有得到这个,那么你正在做一些不同的事情。

【讨论】:

  • 我认为'问题是错误的',这是证明,是正确\有效的答案。
  • 这怎么会是一个“证明”?它在他的计算机上按预期运行,而不是我的。至少我现在知道这不是一个普遍的问题,谢谢 Marc。
  • 我认为没有人真正相信你@Linksku,并不是说我们认为你故意误导我们,只是你还没有分享的事情正在发生。
  • 好吧,你在指责 PHP 做一些在 PHP 中绝对不可能的事情。过滤“有效” html 的字符串不是它的工作……尤其是当 PHP 可以生成许多其他不是 html 的东西时。如果某些东西正在剥离那些“无效标签”,那么那是围绕 PHP 的东西,或者是作为非标准过滤器插入到 PHP 中的东西。开箱即用的 PHP 不能做这样的事情。
  • 我只用&lt;?php echo 'a'.'&lt;a'; 创建了一个文件,但错误仍在发生。所以这只是我的 PHP 版本或我的计算机的一个错误,现在有人可以关闭这个问题。
【解决方案2】:

尝试用&amp;lt;替换有问题的回声中的&lt;

echo 'a'.'&lt;a'; 

【讨论】:

    【解决方案3】:

    我遇到了一个非常相似的行为,使用 concat 运算符会删除内容,顺便提一下,也是以

    我无法在测试脚本中重现它,所以我认为 concat 操作问题不是根源而是症状。

    原来我们之前在同一个脚本中通过 PECL ssh2 进行了操作,这导致了段错误并随后搞砸了进一步发生的事情。

    所以我的建议是检查错误日志并寻找问题的间接原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多