有没有用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更改为UTF-8//TRANSLIT。
utf8_encode
函数将 ISO 8859-1 编码转换为 UTF-8 编码。因此,只有在输入编码为 ISO 8859-1 时才能使用该函数。 - Gumboiconv()
,但如果源数据恰好使用ISO-8859-1,则utf8_encode()
也可以胜任。mb_detect_encoding()
并不能像大多数人想的那样实现功能。事实上,它几乎是无用的。最多,您可以使用它来区分UTF-8和UTF-16,但需要正确配置它。 - Álvaro González请注意,使用iconv()
可能会返回false,如果转换失败。
我也遇到了类似的问题,如果文件编码为UNICODE,则一些中文字母会被错误地识别为\n
,但如果是UFT-8,则不会出现这种情况。
回到你的问题,确保文件的编码与数据库的编码相同。另外,对已经是utf-8文本的使用utf-8_encode()
可能会产生不愉快的结果。尝试使用mb_detect_encoding()
查看文件的编码,但不幸的是,这种方法并不总是有效的。从我所看到的来看,字符编码没有简单的解决办法 :(
ANSII
这样的东西。 - Álvaro González