2011-02-09 54 views
3

“对不起,我希望这不是奇怪或什么,”有没有PHP函数来解决这个问题?

我该如何解决这个问题的编码?

+2

这取决于它来自哪里以及它是什么。一般来说,一旦你有真正的[mojibake](http://en.wikipedia.org/wiki/Mojibake),你不能神奇地修复它。如果你只是没有正确地处理编码,你可以在适当的位置修正它,以防止它首先成为mojibake。 – deceze

+2

你能更详细地描述这个问题吗? – yuxhuang

回答

4

什么你正在运行到的结果是数据以一种编码写入,并被解释为另一种编码。您需要确保您要求输入的格式与您所期望的相同。我建议您只需坚持使用UTF-8,除非您需要避免多字节字符,在这种情况下你可能想看看强制ASCII。

确保你告诉PHP使用UTF-8内部:

ini_set('default_charset', 'UTF-8'); 

,并确保你告诉浏览器期望UTF-8编码的文本,无论是在头...

header("Content-Type:text/html; charset=UTF-8"); 

...在你的meta标签(HTML5以下)...

<meta charset="utf-8"> 

设置,这将告诉浏览器发送UTF-8编码的内容在提交表单时会提供给您,并且它会将您发回的结果解释为UTF-8。

您还应该确保数据库存储和连接编码都是UTF-8格式。通常只要它只是一个非常愚蠢的数据存储(即它不会以任何方式操纵或解释数据),这并不重要,但最好是稍后再遇到问题。

+0

+1用于检查您的数据库是否也是UTF-8 – Summer

1

什么是你的PHP设置?

您可以配置PHP来编码出来的字符串,在大多数情况下UTF8它的建议,你也必须在你的HTML页面中的内容类型标签

3

iconv函数通常能够处理这类编码问题。

+1

'iconv'可以提供帮助,但前提是您知道需要将编码转换为另一种编码。 Webnet似乎并不熟悉这个问题,不知道他想要的是从哪个转换来的编码。 – coreyward

0

另外,如果我可以添加上述的那些要点,如果要将数据保存到数据库表中,表和列(也可能是数据库本身)应该有utf8_general_ci,以便它可以处理多字节字符。

在运行任何查询之前,我还发出此查询集名称'utf8'

+0

排序规则(比如utf8_general_ci或utf8_unicode_ci)对于除排序之外的任何内容均无关紧要。你可能是指“CHARACTER SET”,因为MySQL指的是它应该被设置为“utf8”。 – coreyward

+0

不错..感谢澄清它 – r2b2

+0

偶然发现了这个答案和评论....你应该实际上使用'utf8mb4_unicode_ci'! mysql的utf8只支持最多3个字节... utf8mb4支持完整的4个字节。统一整理也有所破坏unicode整理遵循规范。 –

0

看起来合适的解决方案是mb_convert_encoding()

mb_convert_encoding(字符串$ STR,字符串$ to_encoding [,混合$ from_encoding])

字符串str的字符编码转换选自任选from_encoding到to_encoding 。

相关问题