WAMP 上的美元符号字符问题


Dollar sign char issue on 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:已解决,请参阅模板处理程序是原因的答案。

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

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

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

然后,请您在此处粘贴结果吗?

在这里,框架有一个模板系统,其中preg_replaced片段。

这在将内容返回到浏览器之前给出了内容问题。

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

改为

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

这就解释了为什么你们不能复制它。我怎么也想不到这就是原因。但发现后就很合乎逻辑了。