7

有没有办法用 PHP 做到这一点?

当我打印出来时,要插入的数据看起来很好。

但是当我将它插入数据库时​​,该字段变为空。

4

3 回答 3

14
$tmp = iconv('YOUR CURRENT CHARSET', 'UTF-8', $string);

或者

$tmp = utf8_encode($string);

奇怪的是你最终在你的数据库中得到了一个空字符串。我可以理解你最终会在你的数据库中得到一些垃圾,但没有什么(空字符串)是奇怪的。

我刚刚在控制台中输入了这个:

iconv -l | grep -i ansi

它向我展示了:

ANSI_X3.4-1968
ANSI_X3.4-1986
ANSI_X3.4
ANSI_X3.110-1983
ANSI_X3.110
MS-ANSI

这些是您当前字符集的可能值 正如之前指出的,当您的输入字符串包含 UTF 中允许的字符时,您不需要转换任何内容。

当您不想省略字符但将它们替换为类似字符时(当它们不在 UTF-8 集中时),请在 UTF-8//TRANSLIT 中更改 UTF-8

于 2011-01-04T15:50:07.137 回答
8

“ANSI”并不是真正的字符集。这是一种简短的说法,即“任何字符集都是创建数据的计算机中的默认字符集”。所以你有一个双重任务:

  1. 找出字符集数据正在使用什么。
  2. 使用适当的函数转换为 UTF-8。

对于#2,我通常很满意,iconv()utf8_encode()如果源数据恰好使用 ISO-8859-1,我也可以完成这项工作。

更新

看起来您不知道您的数据使用的是什么字符集。在某些情况下,您可以通过 Microsoft Windows 在此类地区使用的默认编码确定您是否知道用户的国家和语言(例如,西班牙/西班牙语)。

于 2011-01-04T15:52:37.827 回答
3

注意,iconv()如果转换失败, using 会返回 false。

我也有类似的问题,\n如果文件以 UNICODE 编码,则中文字母中的某些字符会被误认为,但如果是 UFT-8,则不会。

要回到您的问题,请确保您的文件的编码与您的数据库相同。在已经是 utf-8 的文本上使用utf-8_encode()也会产生不愉快的结果。尝试使用 mb_detect_encoding()来查看文件的编码,但不幸的是,这种方式并不总是有效。从我所看到的来看,字符编码没有简单的解决方法:(

于 2013-12-04T12:03:21.840 回答