首页 / PHP / 如何正确处理PHP中的UTF-8?
如何正确处理PHP中的UTF-8?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何正确处理PHP中的UTF-8?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2359字,纯文字阅读大概需要4分钟。
内容图文
![如何正确处理PHP中的UTF-8?](/upload/InfoBanner/zyjiaocheng/674/c4d889b83c50417ea54c63cd09d807ca.jpg)
我正在尝试使我们的聊天系统支持UTF-8,但是失败了.如果在客户端,我发送了以下消息,则该消息是通过encodeURIComponent传递的:
>îûôó
并将其放在PHP端:
error_log(print_r(array(
$_POST['message'],
urldecode($_POST['message']),
rawurldecode($_POST['message']),
utf8_decode($_POST['message']),
utf8_decode(urldecode($_POST['message'])),
utf8_decode(rawurldecode($_POST['message']))
), true));
这是我的错误日志中的输出:
Array
(
[0] => %C3%AE%C3%BB%C3%B4%C3%B3
[1] => ?????′?3
[2] => ?????′?3
[3] => %C3%AE%C3%BB%C3%B4%C3%B3
[4] => ???ó
[5] => ???ó
)
所以一切都很好.但是,如果我使用它们,则都是从Wikipedia(分别为俄语和日语页面)复制的:
>русскийязык
>日本语
一切都到地狱!
Array
(
[0] => %D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%20%D1%8F%D0%B7%D1%8B%D0%BA
[1] => ?€????DoD?D1 ?D·??Do
[2] => ?€????DoD?D1 ?D·??Do
[3] => %D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%20%D1%8F%D0%B7%D1%8B%D0%BA
[4] => ??????? ????
[5] => ??????? ????
)
Array
(
[0] => %E6%97%A5%E6%9C%AC%E8%AA%9E
[1] => ?—¥???èa?
[2] => ?—¥???èa?
[3] => %E6%97%A5%E6%9C%AC%E8%AA%9E
[4] => ???
[5] => ???
)
我需要做些什么才能使这项工作?
解决方法:
$_POST['message'], => [0] => %C3%AE%C3%BB%C3%B4%C3%B3
您已经对输入内容进行了网址过度编码. GET / POST / REQUEST超全局变量已经在必要时处理了URL解码输入字符串,您无需手动对其进行URL解码.
看看导致此请求的原因(XMLHttpRequest?),然后删除对encodeURIComponent()的多余调用.例如,如果您使用的是jQuery ajax()并将POST数据作为对象传递,则jQuery会为您调用encodeURIComponent(),您也不需要自己做.
urldecode($_POST['message']), => ?????′?3
这是UTF-8,被误解为Windows代码页1252(西欧,类似于ISO-8859-1).
您很可能已经成功将UTF-8字节保存到日志文件中,但是无论您在读取日志文件中是什么,都没有意识到它应该呈现为UTF-8.
utf8_decode(urldecode($_POST['message'])), => ???ó
这只行得通,因为您用来测试它的字符也存在于代码页1252中.utf8_decode的名称具有误导性;它实际执行的操作是将UTF-8字节序列转换为表示相同字符串的ISO-8859-1字节序列.通常,您希望使用UTF-8而不是ISO-8859-1,因此通常应避免使用utf8_decode.
русский язык => ??????? ????
可以理解:西里尔字母在代码页1252中不存在.
假设您将error_log输出发送到文件,并尝试读取该文件,坚持使用普通的UTF-8字节,并在一个体面的文本编辑器中阅读日志,该文本编辑器可让您查看和选择编码;理想情况下,默认为UTF-8的现代版本.或者,您可以说服记事本通过将其另存为UTF-16或UTF-8并在开始处包含字节顺序标记来读取Unicode文件. (在UTF-8文件中包含BOM表是错误的,但是Microsoft世界中的许多工具都这样做.)
内容总结
以上是互联网集市为您收集整理的如何正确处理PHP中的UTF-8?全部内容,希望文章能够帮你解决如何正确处理PHP中的UTF-8?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。