Php 字符集编码问题
我正在开发一个阿拉伯语网站。但是,我使用AJAX在数据库中保存一些文本。AJAX对我来说很好。我的问题是,当我将数据保存在数据库中并尝试在屏幕上打印时,它会返回一个奇怪的文本。我使用PHP函数mb_detect_encoding来确定数据库如何处理文本。函数返回UTF-8。 所以我使用iconv(“windows-1256”,“UTF-8”,“$row[“text”])在屏幕上打印文本,但它仍然返回这个奇怪的东西。请帮忙Php 字符集编码问题,php,mysql,Php,Mysql,我正在开发一个阿拉伯语网站。但是,我使用AJAX在数据库中保存一些文本。AJAX对我来说很好。我的问题是,当我将数据保存在数据库中并尝试在屏幕上打印时,它会返回一个奇怪的文本。我使用PHP函数mb_detect_encoding来确定数据库如何处理文本。函数返回UTF-8。 所以我使用iconv(“windows-1256”,“UTF-8”,“$row[“text”])在屏幕上打印文本,但它仍然返回这个奇怪的东西。请帮忙 谢谢我建议将您的网页更改为UTF-8。请查看该线程(并在首先发布问题之前使
谢谢我建议将您的网页更改为UTF-8。请查看该线程(并在首先发布问题之前使用搜索) 在您的例子中,我认为您忘记了为数据库连接设置chorect字符集(使用
set NAMES
语句或)-但这很难说
这是一段引用,他在喜欢的帖子中给出了一个完美的答案,列出了你需要注意的所有要点:
存储:
- 指定
(或 等价)所有表的排序规则 和数据库中的文本列。 这使得MySQL在物理上存储 在UTF-8中本机检索值utf8\u unicode\u ci
- 在PHP中,在任何数据库包装器中
如果使用,则需要设置连接
字符集为utf8。通过这种方式,MySQL做到了
未从其本机UTF-8进行转换
当它将数据交给PHP时。
*
请注意,如果不使用DB
包装器,您可能必须发出
一个告诉MySQL给你的查询
UTF-8中的结果:
(只要你接通)设置名称“utf8”
- 您必须告诉PHP交付
向客户端发送正确的头,因此
文本将被解释为UTF-8。在里面
在PHP中,您可以使用
php.ini选项,或手动发出default\u字符集
标题,其中 只是更多的工作,但有相同的 效果内容类型
- 您希望所有数据通过发送给您
浏览器应为UTF-8格式。
不幸的是,只有这样
可靠地做到这一点是添加
将字符集接受为所有
标签: - 注
W3CHTML规范说
客户端“应该”默认为发送
表单以任何形式返回到服务器
服务器提供的字符集,但这是
显然只是一个建议,
因此,有必要明确说明
每一个
标签 - 虽然,在这方面,你仍然
要验证每个提交的字符串吗
作为有效的UTF-8,然后再尝试
在任何地方储存或使用。PHP的
起作用, 但你必须虔诚地使用它mb\u check\u encoding()
- 不幸的是,这是最困难的
部分你需要确保
每次处理UTF-8字符串时,
你这样做很安全。最简单的方法
这是通过广泛使用
PHP的
扩展名mbstring
- PHP的
默认情况下不支持字符串操作
UTF-8安全。有一些事情是你想要的
可以安全地使用普通PHP字符串
操作(如串联),但
对于大多数事情,你应该使用
等效的
函数mbstring
- 到 知道你在做什么(阅读:不要乱 你真的需要知道UTF-8 以及它是如何在最低温度下工作的 可能的水平。查看任何 链接从一些好的 学习所需一切的资源 知道
- 还有,我觉得是这样的 应该在某个地方说,即使 这似乎很明显:每个PHP或HTML 您将要提供的文件应该是 以有效的UTF-8编码
请注意,您不需要使用utf-8-重要的部分是在任何地方都使用相同的字符集,而与可能的字符集无关。但是如果您仍然需要更改内容,请使用utf-8。理想情况下,您应该在网页、数据库和JavaScript/AJAX中使用相同的编码(utf-8?)。很多人忘了为AJAX请求/响应设置字符集,这会在某些浏览器中导致数据损坏(咳嗽)。谢谢大家的支持,oezi对此表示抱歉。我真的搜索了一下,没有找到我的答案。不过,我现在觉得它很好用。我将解释我是如何使它工作的,这样其他任何人都可以从中受益: -我将我的表格字符设置为utf8\uUnicode\uCI。 -为了提交数据,我使用了带有默认字符集UTF-8的AJAX。 -当我从数据库中获取数据时,我使用iconv函数作为以下函数 iconv(“UTF-8”,“windows-1256”,“$row[“text”]),它可以工作 我希望这是清楚的