【发布时间】:2011-12-20 05:50:00
【问题描述】:
我有一个处理来自世界各地的客户的应用程序,当然,我希望进入我的数据库的所有内容都采用 UTF-8 编码。
对我来说主要问题是我不知道任何字符串的源将是什么编码 - 它可能来自文本框(使用<form accept-charset="utf-8"> 仅在用户实际提交表单时才有用),或者它可能来自上传的文本文件,所以我真的无法控制输入。
我需要一个函数或类,以确保进入我的数据库的内容尽可能采用 UTF-8 编码。我试过iconv(mb_detect_encoding($text), "UTF-8", $text);
但这有问题(如果输入是“未婚夫”,则返回“未婚夫”)。我已经尝试了很多东西=/
对于文件上传,我喜欢让最终用户指定他们使用的编码,并向他们展示输出的预览,但这无助于对付讨厌的黑客(事实上,它可以让他们的生活更轻松)。
我已阅读有关该主题的其他 SO 问题,但它们似乎都有细微的差异,例如“我需要解析 RSS 提要”或“我从网站上抓取数据”(或者,实际上,“你不能”)。
但一定有什么东西至少有好的试试!
【问题讨论】:
-
根据定义基本上不可能完全正确,实际上猜测未知编码的成功率并不高。可以使用启发式方法,但正确率低于 100%,具体取决于材料远低于 100%。你需要意识到这一点。也许这里有人至少可以建议一个具有良好启发式的库。
-
当然,我知道没有完美的解决方案 - 因此,我们希望至少能顺利进行。
-
这可能会有所帮助:stackoverflow.com/q/505562/642173
-
您是否尝试过使用
UTF-8//IGNORE作为iconv中的第二个参数? -
是的,这就是我最终所做的。显然,这并不完美,因为“未婚妻”变成了“未婚夫”,但肯定更好。为什么 TRANSLIT 不起作用?
标签: php utf-8 character-encoding