我希望能解释为什么某些 UTF-8 文本被错误地保存到数据库表中......
我创建了一个 HTML 表单,页面的元内容设置为 UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
PHP 和模板文件都是 Unicode/UTF-8。
表单字段数据被提交到utf8_unicode_ci
编码的数据库表。
如果我提交带有诸如“éçä”(我从 Windows 的字符映射程序设置为 Unicode 字符集创建)之类的字符的表单,它们在数据库中显示不正确(“éçä”)。我正在通过 phpMyAdmin(也设置为 UTF-8 字符编码)查看数据库。
但是,如果我在将字符串插入数据库之前对字符串运行 iconv() 以转换为 ISO-8859-1,则字符会正确显示:
$input = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $input);
到底是怎么回事?从头到尾一切都是 UTF-8/Unicode 的事实不应该导致它在数据库中是正确的吗?我做错了什么,为什么将数据转换为 ISO-8859-1 有效?
对数据所做的唯一其他事情是 FILTER_SANITIZE_MAGIC_QUOTES:
$input = filter_var($input,FILTER_SANITIZE_MAGIC_QUOTES);
感谢您的时间和投入。