我正在修复一些糟糕的UTF-8编码.我目前正在使用PHP 5和MySQL.
在我的数据库中,我有一些不良编码的实例,如:î
>数据库排序规则是utf8_general_ci
> PHP正在使用正确的UTF-8标头
>记事本设置为使用不带BOM的UTF-8
>数据库管理在phpMyAdmin处理
>并非所有重音字符都被破坏
我需要某种功能来帮助我将î,ÃÂ,ü和其他类似的实例映射到正确的重音UTF-8字符.
解决方法:
我不得不试图在过去“修复”一些UTF8破坏的情况,不幸的是,这从来都不容易,而且往往是不可能的.
除非你能确切地确定它是如何被打破的,并且它总是以完全相同的方式被打破,否则很难“消除”这种伤害.
如果您想尝试撤消损坏,最好的办法是开始编写一些示例代码,在这些代码中您尝试对mb_convert_encoding()调用进行多种变化,以查看是否可以找到“from”和“to”的组合.修复您的数据.最后,由于所涉及的痛苦程度,通常最好不要担心修复旧数据,而只是解决未来的问题.
但是,在执行此操作之前,您需要确保首先修复导致此问题的所有内容.您已经提到您的数据库表格排序和编辑器设置正确.但是有更多地方需要检查以确保所有内容都是正确的UTF-8:
>确保您以UTF-8的形式提供HTML:
> header(“Content-Type:text / html; charset = utf-8”);
>将PHP默认字符集更改为utf-8:
> ini_set(“default_charset”,’utf-8′);
>如果您的数据库始终没有在utf-8中进行通话,那么您可能需要在每个连接的基础上告诉它以确保它处于utf-8模式,在MySQL中您通过发出以下命令来实现:
> charset utf8
>您可能需要告诉您的网络服务器始终尝试以UTF8进行通话,在Apache中,此命令是:
> AddDefaultCharset UTF-8
>最后,您需要始终确保使用正确的UTF-8投诉的PHP函数.这意味着始终使用mb_*样式的“多字节识别”字符串函数.它还意味着在调用htmlspecialchars()等函数时,在末尾包含相应的’utf-8’charset参数,以确保它不会错误地编码它们.
如果您错过了整个过程中的任何一步,编码可能会被破坏并出现问题.一旦你进入了做utf-8的’凹槽’,这一切都成了第二天性.当然,PHP6应该是来自getgo的完全unicode投诉,这将使这很容易(希望如此)
标签:php,mysql,unicode,utf-8
来源: https://codeday.me/bug/20190915/1805153.html