Php 如何从ajax表单到MySQL获取非英语字符
我有一个表单可以使用提交数据。从这里开始,它经过一些服务器端处理,最后存储在MySQL数据库中 提交这些字符后,它们将作为Php 如何从ajax表单到MySQL获取非英语字符,php,javascript,utf-8,character-encoding,iso-8859-1,Php,Javascript,Utf 8,Character Encoding,Iso 8859 1,我有一个表单可以使用提交数据。从这里开始,它经过一些服务器端处理,最后存储在MySQL数据库中 提交这些字符后,它们将作为ÃÃÃ、ÃÃÃÃ发送到服务器(在访问数据库之前)。同样的事情也发生在日文字符上,等等 我尝试了UTF-8和ISO-8859-1的表单编码、页面编码、php服务器端编码和db编码。仍然不走运。字符可能是从WORD(ISO-8859-1)粘贴的。Ajax只需要UTF-8,因此在将它们发送到服务器之前,您必须在客户机上转换它们 请参阅:在内部,JavaScript与UTF-16字符
ÃÃÃ、ÃÃÃÃ
发送到服务器(在访问数据库之前)。同样的事情也发生在日文字符上,等等
我尝试了UTF-8和ISO-8859-1的表单编码、页面编码、php服务器端编码和db编码。仍然不走运。字符可能是从WORD(ISO-8859-1)粘贴的。Ajax只需要UTF-8,因此在将它们发送到服务器之前,您必须在客户机上转换它们
请参阅:在内部,JavaScript与UTF-16字符串和函数(如
encodeURIComponent()
将字符编码为UTF-8)配合使用,因此问题可能不是JavaScript代码。问题可能在PHP代码中
- 服务器发送的每个页面(包括表单所在的页面)都必须具有标题
。您可以使用Firebug的网络面板来检查这一点内容类型:text/html;字符集=UTF-8
- 在进行任何查询之前,请始终检查您的MySQL连接。否则,MySQL会将UTF-8字符串的每个字节解释为一个拉丁字符,这很容易导致您所描述的结果。使用以下代码:
mysql_query("SET NAMES 'utf8'"); // works in old versions of PHP (< 5.2) mysql_set_charset('utf8',$conn); // works in PHP 5.2+
mysql_查询(“设置名称'utf8'”);//适用于旧版本的PHP(<5.2) mysql_set_字符集('utf8',$conn);//在PHP5.2中工作+
- 请记住,某些(并非所有)PHP字符串函数将被删除
encodeURIComponent()
应该可以工作。字符就像是从键盘添加的一样。至于引用的链接,我看不到问题的解决方案(除了您建议我在发送之前“转换”它们之外),您能详细说明一下吗?$.ajaxSetup({scriptCharset:“utf-8”,contentType:“application/json;charset=utf-8”});我把范围缩小到php的序列化函数,这是罪魁祸首。谢谢