ajax和发布非拉丁字符的问题

时间:2010-05-01 17:01:25

标签: mysql utf-8 translation

使用ajax + jquery发布基于非拉丁语言不会将正确的文本保存到mysql。

我所做的是:

  • 我从Google的翻译api获得了多个翻译的单词。
  • ajax请求显示所有语言的正确翻译
  • 但是当我尝试将其插入数据库时​​,它会在php中显示我的管理员为乱码文本
  • 我在根目录上添加了AddDefaultCharset UTF-8到.htaccess文件。
  • 我尝试将php中的标题设置为utf-8,但这不起作用。
  • 我尝试将一个contentType添加到ajax设置中,但这也不起作用。

任何建议表示赞赏。

我正在使用以下jquery代码:

我能够看到发送到save_translation.php页面的翻译文本

 var d = {"english":"<?php echo $w;?>","addwords":translated};
   data = jQuery.param(d);
   $.ajax({
     type:"POST",
     data:data,
     url:"save_translation.php"
     });

每个字段都设置为utf8_general_ci

更新:回复:

Ajax帖子

英语:谢谢 addwords:baie dankie | falemnderit |شكرا|дзякуй|благодаря|gràcies|谢谢|谢谢|谢谢| hvala vam |děkuji| tak | dank u |谢谢|tänanteid| salamat | kiitos | merci | grazas | Danke |σαςευχαριστώ| תודה|धन्यवाद|köszönöm|þakkaþér| terima kasih | go raibh maith agat | grazie |ありがとう|감사합니다| paldies |ačiū|Виблагодарам| terima kasih | nirringrazzjak | takk skal du ha |تشکرازشما|dziękuję| obrigado |mulţumesc |спасибо|хвала|ďakujem| hvala | gracias | asante | tack | salamat |คุณขอบคุณ|teşekkürederim|спасибі|cảmơnbạn| ddiolch'ch |אַדאַנק

服务器端输出

英语:谢谢你

baie dankie | falemnderit |شكرا| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | धन्यवाद|köszönöm|þakka疗法| terima kasih |去raibh maith阿加特|古拉爵|ありがとう|감사합니다| paldies |阿丘|Виблагодарам| terima kasih | nirringrazzjak | TAKK斯考尔杜厦|تشکرازشما|dziękuję| obrigado |mulţumesc|спасибо |хвала|ďakujem| hvala | gracias | asante | tack | salamat |คุณขอบคุณ|teşekkürederim|спасибі|cảmơnbạn| ddiolch'ch |אַדאַנק|

每个字段都设置为utf8_general_ci

phpMyAdmin的

谢谢| baie dankie | falemnderit |Ø'كرا|Ð'зÑкуй|благоÐ'аÑ|Ñ|grÃ|cè|è°è°¢|è° ¢°¢| |è¬è¬| hvala vam |dÄ> kuji | tak | dank u |谢谢|tönanteid| salamat | kiitos | merci | grazas | Danke |σαÏ,ÎμÏ...χÎα ÏιÏÏÏ“ÏŽ|תוהד|धनà¥à¤¯à¤μाà¤| |köszönöm|þakkaþér | terima kasih | go raibh maith agat | grazie |ã,ã,ŠãŒã¨ã†|ê°ì,¬í•©ë<¤| paldies |aÄiÅ«|Ð'иблагоÐ'арР°Ð¼| terima kasih | nirringrazzjak | takk skal du ha |تØ'کرازØ'Ù...ا|dziÄ™kujÄ™| obrigado |mulÅ£umesc |ÑпаÑибо| Ñ...вала| akuakujem | hvala | gracias | asante | tack | salamat |ณุดà¸,à¸à¸šà¸“à¸¸à”“|teÅŸekkürederim| ÑпаÑибÑ-|cảơbạn| ddiolch'ch |×ַד×Ö·×ק

1 个答案:

答案 0 :(得分:1)

使用JavaScript函数encodeURIComponent可能就足够了。

如果您没有向myUrl + '?param1=' + param1 + '&param2' + param2这样的网址添加参数手册,但是使用构造myUrl + '?' + jQuery.param({param1:param1, param2:param2}),那么关于函数函数encodeURIComponent的编码将为您创建jQuery。在所有'&amp;'的情况下还将添加字符和'paramX ='字符串。

但是使用data方法的jQuery.ajax参数的最佳方法。如果你使用

jQuery.ajax({
    url: myUrl,
    data: {param1:param1, param2:param2},
    //...
});

然后,您的网址将附加'?param1=' + param1 + '&param2' + param2,其中相应的编码已填满jQuery

如果我的提示无法帮助您,请发布您的代码示例。

更新:发布测试数据后很明显,您对ajax请求没有任何问题。您显示服务器的数据看起来绝对正确。所以你的问题介于PHP和MYSQL之间。我和这两种产品都没有合作,现在可以帮到你了。可能来自以下链接的信息可以帮助您string issue of utf-8 encoding with PHP and MySQL?。你也可以尝试

mysql_query("SET NAMES 'utf8'"); 
mysql_query("SET CHARACTER SET 'utf8'");

祝你成功并迅速解决问题。 此致

P.S。在ajax请求中,您可以直接使用data: {"english":"<?php echo $w;?>","addwords":translated}。调用jQuery.param将为您生成jQquery,因为data的类型不是字符串。但它完全独立于你的问题。