代码之家  ›  专栏  ›  技术社区  ›  Pelle

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

  •  0
  • Pelle  · 技术社区  · 14 年前

    我做了以下事情:

    1. 我有一个有数据的电子表格。其中一行有一个字符。
    2. 我将此文件保存为OpenOffice.org中的CSV文件。当它要求我进行字符编码时,我选择UTF-8。
    3. 我使用Navicat创建一个MySQL数据库表,InnoDB使用UTF-8utf8_通用编码并导入CSV。
    4. 我尝试使用PHP函数 htmlspecialchars($string, ENT_COMPAT, 'UTF-8') 哪里 $string 是包含特殊字符的字符串。

    它给了我一个错误: 参数中的多字节序列无效 . 当我改变 'UTF-8' 具有 'ISO8859-1' ,不会引发错误,但会显示不正确的字符。(“未知字符”字符,看起来像 <?> )

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

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

    一些不被视为一个字符的多字节`

    怎么了,哪里出了问题,我能怎么办?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Pekka    14 年前

    虽然我不知道“无效多字节”错误是从何而来,但我很确定 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;
    

    在执行插入操作之前。