提问人:James 提问时间:5/6/2009 最后编辑:hakreJames 更新时间:10/21/2012 访问量:11084
PHP 字符编码问题
PHP character encoding problems
问:
我需要帮助解决一个字符编码问题,我想一劳永逸地解决该问题。下面是我从 XML 提要中提取的一些内容的示例,插入到我的数据库中,然后拉出。
正如你所看到的,很多特殊的html字符被损坏/破坏。
我怎样才能一劳永逸地阻止这种情况?我如何能够支持所有类型的角色等?
我已经尝试了我能找到的每一段编码,它有时会纠正大多数人的编码,但仍有其他人被损坏了。
答:
我最喜欢的关于JoelOnSoftware编码的文章:每个软件开发人员绝对必须了解Unicode和字符集的绝对最低限度
评论
首先,确保数据库的字符编码设置为支持 UTF-8。其次,PHP 的 ICONV 将成为您的朋友。最后,确保您的响应标头发送正确的字符编码(同样是 UTF-8)。
UTF-8 编码的文本似乎是用 ISO 8859-1 解释的。
如果要处理 XML 文档,则必须使用 HTTP 标头字段 Content-Type
的参数或 XML 声明的属性中给定的编码。如果两者都没有给出,则 XML 规范将 UTF-8 或 UTF-16 声明为默认字符编码,您必须使用一些检测。charset
encoding
你试过utf8_encode()
和utf8_decode()
吗?
使用哪一个将完全取决于您的数据编码方式,您没有指定,但它们对于此类情况非常有用。
header('Content-type: text/html; charset=UTF-8') ;
/**
* Encodes HTML safely for UTF-8. Use instead of htmlentities.
*
* @param string $var
* @return string
*/
function html_encode($var)
{
return htmlentities($var, ENT_QUOTES, 'UTF-8');
}
那两个人救了我,我认为它现在正在起作用。如果继续遇到问题,我会回来的。我应该将其存储在数据库中,例如“&”还是“&”?
评论
htmlspecialchars
看起来您提供的链接包含以 utf-8 编码的数据。(点击该链接,然后将浏览器的编码更改为 utf-8)。
听起来您在从数据库中插入和检索时遇到了问题。确保您的数据库表已将 utf-8 设置为编码。
绝对一劳永逸地确保您永远不会再遇到编码问题:
随时随地使用 UTF-8!
也就是说(如果您使用 mysql 和 php):
- 例如,将数据库中的所有表设置为排序规则“utf8_general_ci”。
- 建立数据库连接后,运行以下 SQL 查询:“SET NAMES 'utf8'”
- 始终确保编辑器的设置设置为 UTF-8 编码。
在 HTML 文档的部分中具有以下 meta 标记:
<meta http-equiv=“content-type” content=“text/html;字符集=utf-8“>
还有一些额外的提示:
- 使用 PHP 进行字符串操作时,请使用多字节函数。
- 您也可以在某个时候检查 http://docs.kohanaphp.com/core/utf8。
或:
你可以只使用一个简单的服务器端配置文件来处理所有编码问题。在这种情况下,您根本不需要标头和/或元标记或修改 php.ini 文件。只需将您想要的字符集编码添加到 .htaccess 文件中,然后将其放入您的 www 根目录中。如果你想摆弄字符集字符串并使用你的 php 代码 - 那是另一回事了。当然,数据库排序规则必须正确。
脚注:UTF-8 不是编码解决方案,而是一种解决方案。使用什么字符集/编码并不重要,只要已经考虑到使用的环境。
在连接到数据库之后,但在执行任何事务之前,请执行以下行,以确保所有数据库通信都采用 UTF-8 格式:
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $dbconn);
评论