我有一个应用程序,可以处理来自世界各地的客户,当然,我希望进入数据库的所有内容都是UTF-8编码的.

对我来说,主要的问题是,我不知道任何字符串的源代码是什么——它可能来自文本框(只有当用户实际提交表单时,使用<form accept-charset="utf-8">才有用),也可能来自上传的文本文件,所以我真的无法控制输入.

我需要的是一个函数或类,以确保进入数据库的内容尽可能是UTF-8编码的.我试了iconv(mb_detect_encoding($text), "UTF-8", $text);

对于文件上传,我喜欢让最终用户指定他们使用的编码,并向他们展示输出的预览,但这无助于抵御恶意黑客(事实上,这可能会让他们的生活变得更轻松).

我读过关于这个主题的其他so问题,但它们似乎都有微妙的区别,比如"我需要解析RSS提要"或"我从网站上抓取数据"(或者,实际上,"你不能").

但一定有什么东西至少有一个好的try

推荐答案

你所要求的是极其困难的.如果可能,最好让用户指定编码.那样的话,防止攻击应该不会容易得多,也不会难得多.

但是,您可以try 这样做:

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

将其设置为strict可能会帮助您获得更好的结果.

Php相关问答推荐

文件大小在php下载读取文件中不可见

在WooCommerce管理订单页面中显示区域名称

RediSearch PHP希望我在每次使用时定义所有字段

从订单项目中获取ACF WooCommerce产品价值

筛选器具有多个查询之一

如何在Livewire 3 Form类中做依赖注入?

如何在UML类图中可视化变量引用数组

PHP文件上载问题-";Move_Uploaded_Files";未按预期工作

调用模型[App\Models\Employee]上未定义的关系[title]

Filament PHP v3:在禁用的表单字段上,ID 不会写入数据库

如何判断php中wordpress路径之外的文件夹是否存在?

通过ajax发送数据到下拉列表未完全设置为所选

如何在 Phpunit 的静态提供程序中创建测试双打?

将 WooCommerce 0 销售价格替换为自定义文本,并保留常规价格删除线

Laravel 路由参数中的 ":" 是什么?

如何在自定义消息中包含 WooCommerce 选定的产品变体详细信息

php如何删除括号内的百分比值

将 HTML 表单链接到 SQLite 数据库

将变量从中间件传递到控制器 Laravel

Symfony 在将它传递给 Twig 时是否从数据库中获取整个对象?