【发布时间】:2015-08-15 21:01:41
【问题描述】:
问题: 你好堆栈溢出! 所以这个编码的东西让我感到最后的紧张。在使用 AJAX 和 PHP 和 SQL 等来回发送内容时,很难弄清楚最好的编码组合是什么,这还不够。但它也会导致 SESSION 出现问题???!
所以基本上我已经找到了一个热修复解决方案——不感谢谷歌,部分原因是我现在写这篇文章。但我也想看看你们中是否有人真的有更实际的解决方案。
问题:
例如,如果我希望我的 PHP 文件具有 UTF-8 编码,它会在文件中添加隐藏字符,然后只能在十六进制编辑器中查看和删除。对于那些不知道的人,是的,任何未注释掉的额外字符都会导致 SESSION 出现问题并给您报头错误。因此,当我删除它们并重新上传文件时,它会退回到 ANSI 编码。也许有不同的编辑器可以将文件更正确地编码为 UTF-8?我不知道,我目前正在使用 Notepad++ 并且对它非常满意,很难相信它会导致编码问题。我还尝试更改.htaccess 文件中的默认编码,无论如何索引文件都没有区别。
【问题讨论】:
-
那么,问题是什么?你编码了什么,你期望什么输出,你得到了什么?
-
我编码的内容无关紧要,因为这里的代码没有试用,但 SESSION 和编码是。所以这个问题真的无关紧要。至于我的预期很清楚,在 index.php 中设置 SESSIONS 是 UTF-8 编码的 PHP 文件。至于错误,你们都知道:
session_start(): Cannot send session cache limiter - headers already sent ... -
但是我的脚本目的有点难以解释。因为我从不同的网站复制了 UTF-8 编码的字符。然后我将它们传递到 ANSI 编码文件中。这给我带来了完全不同的东西。例如,这个商标
™符号将在 ANSI 编码的 php 文件中变为â„¢。这就是它在页面上以奇怪字符而不是实际 TM 符号显示的方式。还有一些标志比其他标志更难维护和替换,并且没有 HTML 的备用替代品,例如™ -
我虽然发现您可以使用
rawurlencode();来保留原始字符,然后您仍然可以以任何编码文件格式打印它们,并且它们会相应地调整自己,因为 url 编码擅长解释并在遇到字符时保留字符。当这些字符仍为 JSON 格式时需要编码时,可能会出现此问题。但是为此,我想我们可以制作一个小的字符白名单,在解析之前它应该重新编码回原来的形式。所以基本上,不需要 UTF-8 文件格式来显示特殊字符。
标签: php session encoding utf-8 character-encoding