0

我做了以下事情:

  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包含特殊 ü 字符的字符串。

它给了我一个错误:Invalid multibyte sequence in argument。当我用 更改'UTF-8''ISO8859-1',不会引发错误,但会显示不正确的字符。(“未知字符”字符,看起来像<?>

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

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

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

发生了什么事,哪里出了问题,我能做些什么?

4

1 回答 1

2

虽然我不明白“无效的多字节”错误来自哪里,但我很确定htmlspecialchars()不是你的罪魁祸首

就该函数而言,字符集 ISO-8859-1、ISO-8859-15、UTF-8、cp866、cp1251、cp1252 和 KOI8-R 实际上是等效的,因为受 htmlspecialchars() 影响的字符占用相同所有这些字符集中的位置。

据我了解,htmlspecialchars()对于 UTF-8 字符串应该可以正常工作而无需指定字符集。我敢打赌,包含表单的 HTML 页面或您使用的数据库连接不是 UTF-8 编码的。对于后者,请尝试发送

SET NAMES utf8;

在执行插入之前到 mySQL。

于 2010-11-21T13:08:39.933 回答