【发布时间】:2013-02-19 10:46:00
【问题描述】:
这是我头疼了一段时间的问题。我需要我的 Web 应用程序来正确处理任何东欧变音符号(主要是 ă Ă î Î ş Ş ţ Ţ â Â)。数据库处理妥当,php脚本处理妥当(所有php脚本都使用utf-8编码),但是处理表单时出现问题。
例如,将以下内容插入数据库,处理正确,字符编码正确,保存正确,显示正确:
$insert_value = htmlentities('ă Ă î Î ş Ş ţ Ţ â Â',ENT_COMPAT, "UTF-8");
但是,如果我在 text/textarea 输入中键入相同的字符串并使用 POST 发送它:
$insert_value = htmlentities($_POST['test_string'],ENT_COMPAT, "UTF-8");
这将返回一个空字符串。
我检查了脚本使用 Firefox 接收的 POST,而不是 'ş Ş ţ Ţ' 字符,我得到了奇怪的符号(º ª þ Þ),所以我猜这就是为什么 htmlentities 返回为空。
我尝试将表单上的 enctype 设置为 multipart/form-data,它似乎可以正确发送它,但随后将 htmlentities 应用到它仍然会以某种方式搞砸(例如,如果 $_POST['ta'] = ăĂîÎşŞţŢâÂ, htmlentities($_POST['ta'],ENT_COMPAT, "UTF-8") returns $kappa;)
编辑:非常感谢 deceze,该链接帮助我处理我的 Web 应用程序的编码,而无需任何 htmlentities 调用。我向那些在 php、html 和数据库之间处理变音符号有困难的人推荐这篇文章。
【问题讨论】:
-
不要对进入数据库的数据进行 HTML 编码,Handle Unicode Front To Back In A Web App
-
嗯,谢谢。似乎 accept-charset="utf-8" 修复了它。我必须在午休后阅读更多内容,以便为不在表单中的输入找到解决方案。
-
再次感谢 deceze,如果您想创建一个简短的答案只是为了将问题标记为已回答,我会很感激。