jQuery.AJAX发送给PHP时出现损坏的字符(UTF-8和ISO-8859不兼容)

我有一个javascript / PHP脚本执行以下操作:

Uses javascript to find text on a web-page. Transmits the text using jQuery AJAX to a PHP page. The PHP stores the text in a MySQL database. 

问题是,当我查看数据库中存储的内容时,某些非ASCII字符已损坏。

我已经简化了问题并打印出每个字母的字符代码以调查发生了什么。

例如:发送单个字符,英镑符号。 当我签入PHP时,收到的是字符0xC2,后跟0xA3(资本A旋风,由英镑表示)。 即在£之前得到一个虚假的额外角色。

我看过类似的问题,建议设置jQuery.ajax contentType等,但这对我来说都没有意义。

谢谢

听起来你有混合字符集。 那里有UTF-8,ISO-8859。 PHP不会单独将单磅字符分成两个,但浏览器可能会被告知期望iso-8859而是发送UTF-8。 Â 这是一个死的赠品。

基本上,确保在处理的所有阶段(数据库,PHP,HTML)使用UTF-8,通常情况会更好。

终于有了这个工作。

问题似乎是jQuery.ajax使用UTF-8将数据传输到服务器,但PHP期望iso-8859-1。

解决方案:在PHP中使用utf8_decode函数将UTF-8转换为ISO,例如

 $incomming = utf8_decode($_REQUEST('incomming')); 

当您为ajax返回处理程序发回数据时,请使用utf8_encode()将其转换回UTF-8。

其他似乎有用的事情包括在传输到服务器之前对数据使用javascript escape()函数,然后使用URLdecode()取消PHP中的数据。

我试过的其他东西却无法开始工作:

我试图在iso-8859-1中进行ajax传输,因此它与PHP兼容:在jquery.ajax设置中:contentType:“application / x-www-form-urlencoded; charset = iso-8859-1”。 似乎没有效果。

我试图让PHP使用UTF-8:header(’Content-Type:text / html; charset = utf-8’)。 它再次没有用。