解决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