我做了以下事情:
htmlspecialchars($string, ENT_COMPAT, 'UTF-8')
,其中$string
是包含特殊ü字符的字符串。它给出了一个错误:参数中的多字节序列无效。当我用'UTF-8'
更改'ISO8859-1'
时,不会抛出任何错误,但会显示错误的字符。 ('未知字符'字符,看起来像<?>
)
如果我使用HTML表单更新数据库中的字符串,则错误消失并且字符显示正确,但是,当我查看Navicat中的记录时,它看起来有两个字符:
[1/4][A with some thing on top of it]
一些不被视为一个角色的多字节。
发生了什么,哪里出了问题,我该怎么办呢?
答案 0 :(得分:2)
虽然我不明白“无效多字节”错误的来源,但我很确定htmlspecialchars()
是not your culprit:
出于此功能的目的,字符集ISO-8859-1,ISO-8859-15,UTF-8,cp866,cp1251,cp1252和KOI8-R实际上是等效的,因为受htmlspecialchars()影响的字符在所有这些字符集中占据相同的位置。
根据我的理解,htmlspecialchars()
应该可以正常使用UTF-8字符串而无需指定字符集。我敢打赌,包含表单的HTML页面或您使用的数据库连接不是UTF-8编码的。对于后者,请尝试发送
SET NAMES utf8;
在插入之前到mySQL。