字符集编码问题

Has*_*san 5 php mysql

我正在开发一个阿拉伯语网站.但是,我使用AJAX在我的数据库中保存了一些文本.AJAX和我一起工作得很好.我的问题是,当我将数据保存在我的数据库中并尝试在我的屏幕上打印时,它会返回一个奇怪的文本.我使用PHP函数mb_detect_encoding来确定数据库如何处理文本.该函数返回UTF-8.所以我使用iconv("windows-1256","UTF-8",$ row ["text"])在屏幕上打印文本,但它仍然返回这个奇怪的东西.请伸出手,谢谢

oez*_*ezi 6

请看一下这个帖子(并在发布问题之前先使用搜索).

在你的情况下,我认为你已经忘记为数据库连接设置了正确的字符集(使用SET NAMES语句或mysql_set_charset()) - 但这很难说.

这是chazomaticus的一句话,他在喜欢的帖子中给出了一个完美的答案,列出了你需要关注的所有要点:

存储:

  • utf8_unicode_ci在数据库的所有表和文本列上指定(或等效)排序规则.这使得MySQL以UTF-8本地存储和检索值.

恢复:

  • 在PHP中,无论您使用什么DB包装器,都需要将连接字符集设置为utf8.这样,当MySQL将数据移交给PHP时,MySQL不会从其原生UTF-8进行转换.*请注意,如果您不使用数据库包装器,您可能必须发出一个查询来告诉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规范说客户端"应该"默认在服务器所服务的任何字符集中将表单发送回服务器,但这显然只是一个推荐,因此需要在每个<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 - 重要的部分是在任何地方使用相同的字符集,而不管可能是什么字符集.但如果你还需要改变一些东西,请使用utf-8.


Mar*_*wis 0

我建议将您的网页更改为 UTF-8。