小编典典

PHP:在不知道原始字符集的情况下将任何字符串转换为UTF-8,或者至少尝试

php

我有一个与来自世界各地的客户打交道的应用程序,自然,我希望进入数据库的所有内容都采用UTF-8编码。

对我来说,主要问题是我不知道任何字符串的编码源是什么-它可能来自文本框(<form accept- charset="utf-8">仅在用户实际提交表单时才有用),或者可能是从上传的文本文件中获取,因此我真的无法控制输入。

我需要的是一个函数或类,以确保进入数据库的内容尽可能采用UTF-8编码。我试过了,iconv(mb_detect_encoding($text), "UTF-8", $text); 但是有问题(如果输入为’fiancée’,则返回’fianc’)。我已经尝试了很多东西= /

对于文件上传,我喜欢让最终用户指定他们使用的编码,并向他们显示输出结果的预览的想法,但这无助于讨厌的黑客(实际上,这可能会使他们的生活变糟。容易一点)。

我已经阅读了关于该主题的其他SO问题,但是它们似乎都具有细微的差异,例如“我需要解析RSS feed”或“我从网站上抓取数据”(或者实际上是“您不能”)。

但是必须至少 尝试一下


阅读 212

收藏
2020-05-26

共1个答案

小编典典

您要的是非常困难的。如果可能的话,最好让用户指定编码。用这种方法来阻止攻击应该不会变得容易或困难得多。

但是,您可以尝试执行以下操作:

iconv(mb_detect_encoding($text, mb_detect_order(), true), "UTF-8", $text);

将其设置为严格可能会帮助您获得更好的结果。

2020-05-26