我正在开发一个阿拉伯语网站。但是,我使用AJAX在我的数据库中保存了一些文本。 AJAX和我一起工作得很好。我的问题是,当我将数据保存在我的数据库中并尝试在我的屏幕上打印时,它会返回一个奇怪的文本。我使用PHP函数mb_detect_encoding来确定数据库如何处理文本。该函数返回UTF-8。 所以我使用iconv(“windows-1256”,“UTF-8”,$ row [“text”])在屏幕上打印文本,但它仍然返回这个奇怪的东西。请伸出援助之手 感谢
答案 0 :(得分:6)
请查看this主题(并在首先发布问题之前使用搜索)。
在你的情况下,我认为你忘了为数据库连接设置错误的字符集(使用SET NAMES
语句或mysql_set_charset()) - 但这很难说。
这是来自chazomaticus的引用,他在喜欢的主题中给出了一个完美的答案,列出了你需要关注的所有要点:
存储
- 指定
utf8_unicode_ci
(或 等价)所有表格的整理 和数据库中的文本列。 这使得MySQL物理存储和 以UTF-8原生检索值。检索:
- 在PHP中,在任何DB包装器中 使用,你需要设置连接 字符串到utf8。这样,MySQL就可以了 没有从其原生UTF-8转换 当它将数据移交给PHP时。 * 请注意,如果您不使用数据库 包装,您可能不得不发布 一个查询告诉MySQL给你 结果为UTF-8:
SET NAMES 'utf8'
(一旦你连接)。交货:
- 你必须告诉PHP提供 对客户端的正确标头,所以 文本将被解释为UTF-8。在 PHP,你可以使用
default_charset
php.ini选项,或手动发出Content-Type
标题自己,哪个 只是更多的工作,但具有相同的 效果。提交:
- 您想要通过发送给您的所有数据 浏览器采用UTF-8格式。 不幸的是,唯一的方法 可靠地做到这一点就是添加
accept-charset
属于你的所有人<form>
代码:<form ... accept-charset="UTF-8">
。- 注 W3C HTML规范说明了这一点 客户“应该”默认发送 无论如何形成回服务器 charset服务器服务,但这是 显然只是一个推荐, 因此需要明确 每个
<form>
代码。- 虽然在那方面,你仍然会 想验证每个提交的字符串 在尝试之前作为有效的UTF-8 存放或在任何地方使用它。 PHP的
mb_check_encoding()
可以解决问题, 但你必须虔诚地使用它。处理:
- 不幸的是,这很难 部分。你需要确保这一点 每次处理UTF-8字符串时, 你安全地这样做了。最简单的方法 这是通过广泛使用 PHP的
mbstring
扩展名。- PHP的 字符串操作默认情况下不是 UTF-8安全。你有一些事情 可以安全地使用普通的PHP字符串 操作(如连接),但是 对于大多数事情你应该使用 等效
mbstring
函数。- 要 知道你在做什么(读:不要乱 它,你真的需要知道UTF-8 以及它如何在最低的工作 可能的水平。看看任何一个 来自utf8.com的链接有一些好处 学习所需资源的资源 要知道。
- 另外,我觉得这样 虽然应该在某个地方说 看起来很明显:每个PHP或HTML 你要服务的档案应该是 以有效的UTF-8编码。
请注意,您不需要使用utf-8 - 重要的部分是使用相同的charset无处不在,而不管可能是什么字符集。但如果你还需要改变一些东西,请使用utf-8。
答案 1 :(得分:0)
我建议您将网页更改为UTF-8。
答案 2 :(得分:0)
理想情况下,您应该在网页,数据库,和JavaScript / AJAX 中使用相同的编码(UTF-8?)。许多人忘记为AJAX请求/响应设置字符集,这会在某些浏览器中提供错误的数据( cough cough )。
答案 3 :(得分:0)
谢谢你们的支持,对不起oezi感到困惑。我真的做了一个搜索,没有找到我的答案。但是,它现在对我很好。我将解释我为使其工作所做的工作,所以任何人都可以从中获益: - 我把我的表字符集改为utf8_unicode_ci。 - 为了提交数据,我使用了AJAX和默认的字符集UTF-8。 - 当我从我的数据库中获取数据时,我将iconv函数用作以下内容 iconv(“UTF-8”,“windows-1256”,$ row [“text”]),它的工作原理 我希望明确