>我在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);
这就解释了为什么你们不能复制它。我怎么也想不到这就是原因。但发现后就很合乎逻辑了。