我的工作谁拥有所有非常不同的字母,因此我想最终得到PHP和MySQL之间的一个完整的工作流程,以确保所有的字符编码要正确插入的概述国际客户。 我读了一堆关于这个教程,但仍然有问题(还有很多东西需要学习),我想我可能只是把它一起在这里问问。
PHP
header('Content-Type:text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');
HTML
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<form accept-charset="UTF-8"> .. </form>
(虽然后来是可选的,而是一个建议,但我相信我宁愿建议不会做任何事情)
MySQL的
CREATE database_name DEFAULT CHARACTER SET utf8;
或ALTER database_name DEFAULT CHARACTER SET utf8;
和/或使用utf8_general_ci
如MySQL连接核对。
(这是需要注意的重要位置,这将增加数据库的大小,如果它使用VARCHAR)
连接
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER_SET utf8");
业务逻辑
检测如果不使用UTF8 mb_detect_encoding()
与转换ivon()
验证UTF8和UTF16的过分长序列
$body=preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]|(?<=^|[\x00-\x7F])[\x80-\xBF]+|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/','�',$body);
$body=preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $body);
问题
是
mb_internal_encoding('UTF-8')
有必要在PHP 5.3及以上,如果是这是否意味着我必须使用所有的多字节的功能,而不是它的核心功能,如mb_substr()
代替substr()
它仍然需要检查对错误输入蜇伤如果是这样,什么是可靠的函数/类这样做呢? 我可能不想要去除坏的数据,不知道有足够的了解音译。
它应该是
utf8_general_ci
或者说utf8_bin
?是有什么在上面的工作流程失踪?
来源:
http://coding.smashingmagazine.com/2012/06/06/all-about-unicode-utf8-character-sets/
http://webcollab.sourceforge.net/unicode.html
http://stackoverflow.com/a/3742879/1043231
http://www.adayinthelifeof.nl/2010/12/04/about-using-utf-8-fields-in-mysql/
http://akrabat.com/php/utf8-php-and-mysql/