【发布时间】:2011-02-09 02:55:55
【问题描述】:
““对不起,我希望这不是什么奇怪的事情,”
我怎样才能修复这个编码?
【问题讨论】:
-
这取决于它来自哪里以及它是什么。一般来说,一旦你拥有真正的mojibake,你就无法神奇地修复它。如果你只是在途中的某个地方没有正确处理编码,你可以在适当的位置修复它,以防止它首先变成 mojibake。
-
你能详细描述一下这个问题吗?
““对不起,我希望这不是什么奇怪的事情,”
我怎样才能修复这个编码?
【问题讨论】:
您遇到的是数据以一种编码写入并解释为另一种编码的结果。您需要确保您请求的输入格式与您期望的格式相同。我建议您始终坚持使用 UTF-8,除非您需要避免使用多字节字符,在这种情况下你可能想看看强制ASCII。
确保您告诉 PHP 在内部使用 UTF-8:
ini_set('default_charset', 'UTF-8');
并确保您告诉浏览器期待 UTF-8 编码的文本,无论是在标头中......
header("Content-Type:text/html; charset=UTF-8");
...在您的元标记中(下面的 html5)...
<meta charset="utf-8">
设置此项将告诉浏览器在提交表单时向您发送 UTF-8 编码的内容,并且它也会将您发送回的结果解释为 UTF-8。
您还应该确保您的数据库存储和连接编码也是 UTF-8。通常只要它只是一个愚蠢的数据存储(即它不会以任何方式操纵或解释数据)就没有关系,但最好把它做好,而不是以后遇到问题。
【讨论】:
iconv 函数通常能够处理这种编码问题。
【讨论】:
iconv 可以提供帮助,但前提是您知道需要从一种编码转换为另一种编码。 Webnet 似乎对这件事还不够熟悉,无法知道他想要转换的编码是什么。
【讨论】:
你的 php 设置是什么?
您可以配置 php 对字符串进行编码,在大多数情况下建议使用 utf8,并且您的 html 页面中必须有一个 Content-Type 标记
【讨论】:
此外,除了上述几点之外,如果您将数据保存到数据库表中,那么表和列(也可能是数据库本身)应该具有 utf8_general_ci 以便它可以处理多字节字符。
p>我还在运行任何查询之前发出此查询set names 'utf8'。
【讨论】:
utf8mb4_unicode_ci !! mysql 的 utf8 最多只支持 3 个字节... utf8mb4 支持完整的 4 个字节。一般排序规则也有些破坏,unicode排序规则遵循规范。
看起来正确的解决方案是mb_convert_encoding()
字符串mb_convert_encoding(字符串$str,字符串$to_encoding[,混合$from_encoding])
将字符串 str 的字符编码从可选的 from_encoding 转换为 to_encoding。
【讨论】: