尝试使用UTF-8字符串时,PHP htmlspecialchars()函数错误

时间:2010-11-21 12:54:53

标签: php mysql character-encoding htmlspecialchars navicat

我做了以下事情:

  1. 我有一个包含数据的电子表格。其中一行中有一个ü字符。
  2. 我将其保存为OpenOffice.org中的CSV文件。当它要求我进行字符编码时,我选择UTF-8。
  3. 我使用Navicat创建一个MySQL数据库表,InnoDB使用UTF-8 utf8_general编码并导入CSV。
  4. 我尝试使用PHP函数htmlspecialchars($string, ENT_COMPAT, 'UTF-8'),其中$string是包含特殊ü字符的字符串。
  5. 它给出了一个错误:参数中的多字节序列无效。当我用'UTF-8'更改'ISO8859-1'时,不会抛出任何错误,但会显示错误的字符。 ('未知字符'字符,看起来像<?>

    如果我使用HTML表单更新数据库中的字符串,则错误消失并且字符显示正确,但是,当我查看Navicat中的记录时,它看起来有两个字符:

    [1/4][A with some thing on top of it]

    一些不被视为一个角色的多字节。

    发生了什么,哪里出了问题,我该怎么办呢?

1 个答案:

答案 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。