字符集编码问题

时间:2010-11-25 13:06:30

标签: php mysql

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

4 个答案:

答案 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”]),它的工作原理 我希望明确