解决UTF8与法语口音不兼容的问题

我有一个PHP脚本,将用户内容保存到mysql数据库(PHP 5.4,mysql 5.5.31)

我的数据库中所有与字符串相关的字段都有utf8_unicode_ci作为整理。

我的(简体)代码如下所示:

$db_handle = mysql_connect('localhost', 'username', 'password');
mysql_select_db('my_db');

mysql_set_charset('utf8', $db_handle);

// ------ INSERT: First example -------
$s   = "je viens de télécharger et installer le logiciel";
$sql = "INSERT INTO my_table (post_id, post_subject, post_text) VALUES (1, 'subject 1', '$s')";
mysql_query($sql, $db_handle);

// ------ INSERT: Second example -------
$s   = "EPrints and العربية";
$sql = "INSERT INTO my_table (post_id, post_subject, post_text) VALUES (2, 'subject 2', '$s')";
mysql_query($sql, $db_handle);
// ------------- 

mysql_close($db_handle);

问题是,第一插入(与拉丁文字é口音),除非我注释此行失败:

mysql_set_charset('utf8', $db_handle);

但第二个查询(混合拉丁语和阿拉伯语内容)将失败,除非我调用mysql_set_charset('utf8', $db_handle);

我一直在为此挣扎2天。 我认为UTF8确实支持法国口音这样的字符,但显然它不会!

我怎样才能解决这个问题?


mysql_set_charset('utf8', $db_handle)告诉数据库你将要发送的数据将以UTF-8编码。 如果结果搞砸了,那意味着你实际上没有发送UTF-8编码的文本。 仔细检查你发送的内容的编码。

我认为UTF8确实支持法国口音这样的字符,但显然它不会!

我很好。


看看每个程序员绝对,积极需要了解编码和字符集以处理文本并处理Unicode正面背面的Web应用程序。


UTF-8中的PHP文本是什么? 这涉及编辑器的编码。 如果是,那么字符串文字中的字节应该已经没问题。 阿拉伯文也是这样写的。

使用SQL的预准备语句 。 这有几个好处:安全(SQL注入),引号和其他特殊字符的转义,以及...可能... SQL字符串的编码。

不太可能:试试

$s   = utf8_encode("je viens de télécharger et installer le logiciel");

虽然我可以预见到另一个问题:utf8_encode的定义需要一个ISO-8859-1字符串,对于法语是可行的,但对阿拉伯语不可行。 如果这样工作,PHP的编码在某种程度上是错误的。

(我发现Java与Unicode更一致,所以我不完全确定PHP。)


如果需要了解编码和转换的问题,可以使用类似的方法解决,确保编码是CP1252。 反过来确保它是UTF8。

function conv_text($value) {
    $result = mb_detect_encoding($value." ","UTF-8,CP1252") == "UTF-8" ? iconv("UTF-8", "CP1252", $value ) : $value;
    return $result;
}
链接地址: http://www.djcxy.com/p/67819.html

上一篇: Solving UTF8 & french accents incompatibility

下一篇: side, from a base64 data string