【问题标题】:Dollar sign char issue on WAMPWAMP上的美元符号字符问题
【发布时间】:2013-12-18 22:22:49
【问题描述】:

我在 WAMP 服务器上遇到了一个恼人的问题,其中美元符号会去除以下两个字符。

$dollar_sign = '$';
var_dump($dollar_sign); // Returns string '$' (length=1)
echo $dollar_sign .'1234'; // Displays 34

echo '$' . number_format(1234, 0, '', ''); // Displays 34
echo '$1234'; // Displays 34
echo ord('$'); // Returns 36

使用单引号,而不是双引号。

从真实代码调试:

var_dump(bin2hex(self::$currencies[$code]['prefix'])); // Returns 5c24

我尝试了不同的字符集 Windows-1252、ISO-8859-1 和 UTF-8,但似乎不是字符集问题。

它适用于任何 LAMP 服务器 (Linux),但不适用于 Windows。

注意:我不是在寻找 HTML 实体解决方法。

编辑:以下工作,但我想知道为什么。就像单引号在我的 WAMP 安装中具有 eval() 行为。

echo str_replace('$', '\$', $dollar_sign) . '1234'; // Displays $1234
echo chr(36) . '1234'; // Displays $1234

编辑 2:已解决,请参阅导致模板处理程序的答案。

【问题讨论】:

  • 这段代码对我来说在 WAMP 上运行良好。您的计算机在基本 WAMP 之外的某个地方遇到问题。你有没有配置任何特殊的 php 设置?
  • 从命令行按预期工作并在 Windows 7、PHP 5.5.5 上使用 php -S
  • 不可重现。 echo '$1234'; 为其他所有人显示 $1234。显示您的完整代码,或详细说明您的设置。
  • 您是否尝试卸载它并重新安装最新版本?
  • Jessica:已经在使用最新的 WAMP。我并不惊讶它不能被复制。我在 7 年的 PHP 编码中从未见过这种行为。

标签: php wamp


【解决方案1】:

抱歉,这可能不是一个正确的答案。 但是,我怀疑这不是 PHP 问题,它看起来像您测试浏览器的问题。

为了证明,请运行:

$dollar_sign = '$';
echo base64_encode($dollar_sign .'1234');

那么,请把结果贴在这里好吗?

【讨论】:

    【解决方案2】:

    我们开始,框架有一个模板系统,其中 sn-ps 是 preg_replaced。

    这在将内容返回到浏览器之前给了内容打嗝。

    $html = preg_replace($snippet_name, $snippet_content, $html, -1, $replacements);
    

    改为

    $html = preg_replace($snippet_name, str_replace('$', '\$', $snippet_content), $html, -1, $replacements);
    

    这解释了为什么它无法为你们所有人重现。我永远无法猜到这是原因。不过发现后还挺合乎逻辑的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多