在WAMP的美元的符号炭问题

时间:2013-12-18 22:22:50

标签: php wamp

我在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:已解决,请参阅答案,其中模板处理程序是原因。

2 个答案:

答案 0 :(得分:0)

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

为了证明这一点,请你运行:

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

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

答案 1 :(得分:0)

我们开始,框架有一个模板系统,其中片段是preg_replaced。

这会在返回浏览器之前给出内容hickup。

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

更改为

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

这解释了为什么它不能为你们重现。我永远不会猜到这是原因。但是在发现它之后它是非常合乎逻辑的。