【问题标题】:How to properly encode/decode diacritics sent through POST如何正确编码/解码通过 POST 发送的变音符号
【发布时间】: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,如果您想创建一个简短的答案只是为了将问题标记为已回答,我会很感激。

标签: php encoding utf-8


【解决方案1】:

很高兴评论对您有所帮助...

不要对进入数据库的数据进行 HTML 编码,Handle Unicode Front To Back In A Web App。这样做有很多问题,前面链接的文章介绍了最大的问题。

【讨论】:

  • 谢谢,现在花一整天的时间来修改一大堆表单和 ajax 请求。
猜你喜欢
  • 1970-01-01
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 2012-01-31
  • 1970-01-01
相关资源
最近更新 更多