如何正确编码/解码通过POST发送的变音符号


How to properly encode/decode diacritics sent through POST

这是一个让我头疼了一段时间的问题。我需要我的网络应用程序来正确处理任何东欧变音符号(主要是ăĂîIslaşŞŢâ)。数据库正确处理它们,php脚本正确处理它们(所有php脚本都使用utf-8编码),但是在处理表单时会出现问题。

例如,将以下内容插入到数据库中,数据库处理正确,字符编码正确,保存正确,显示正确:

$insert_value = htmlentities('ă Ă î Î ş Ş ţ Ţ â Â',ENT_COMPAT, "UTF-8");

然而,如果我在文本/文本区域输入中键入相同的字符串,并使用POST发送它:

$insert_value = htmlentities($_POST['test_string'],ENT_COMPAT, "UTF-8");    

这将返回一个空字符串。

我检查了Firefox收到的脚本POST,我得到的不是"şŞŢ"字符,而是奇怪的符号(ºªþÞ),所以我猜这就是为什么htmlentities返回空的原因。

我尝试将表单上的enctype设置为多部分/表单数据,它似乎可以正确发送它,但随后对其应用htmlentities仍然会以某种方式将其搞砸(例如,如果$_POST['ta'] = ăĂîÎşŞţŢâÂ, htmlentities($_POST['ta'],ENT_COMPAT, "UTF-8") returns $kappa;

编辑:非常感谢deceze,该链接帮助我在没有任何htmlentities调用的情况下处理web应用程序的编码。我向那些在php、html和数据库之间处理变音符号有困难的人推荐这篇文章。

很高兴这条评论起到了帮助

不要对进入数据库的数据进行HTML编码,在Web应用程序中前后处理Unicode。这样做有很多困难,前面的文章介绍了最大的困难。