有没有办法用 PHP 做到这一点?
当我打印出来时,要插入的数据看起来很好。
但是当我将它插入数据库时,该字段变为空。
$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
“ANSI”并不是真正的字符集。这是一种简短的说法,即“任何字符集都是创建数据的计算机中的默认字符集”。所以你有一个双重任务:
对于#2,我通常很满意,iconv()
但utf8_encode()
如果源数据恰好使用 ISO-8859-1,我也可以完成这项工作。
看起来您不知道您的数据使用的是什么字符集。在某些情况下,您可以通过 Microsoft Windows 在此类地区使用的默认编码确定您是否知道用户的国家和语言(例如,西班牙/西班牙语)。
注意,iconv()
如果转换失败, using 会返回 false。
我也有类似的问题,\n
如果文件以 UNICODE 编码,则中文字母中的某些字符会被误认为,但如果是 UFT-8,则不会。
要回到您的问题,请确保您的文件的编码与您的数据库相同。在已经是 utf-8 的文本上使用utf-8_encode()
也会产生不愉快的结果。尝试使用 mb_detect_encoding()
来查看文件的编码,但不幸的是,这种方式并不总是有效。从我所看到的来看,字符编码没有简单的解决方法:(