Ten*_*eff 5 php mysql encoding utf-8 iconv
您好,我对此查询有疑问
\n\nSELECT * FROM table WHERE `name` LIKE \'%t\xc3\xa9st%\'\nRun Code Online (Sandbox Code Playgroud)\n\nHMTL 和 SQL 表都有 utf-8 编码,但不幸的是没有mysql_set_charset(\'utf-8\'),我无法使用它。
我已经尝试过,iconv("UTF-8", "ISO-8859-1", $name)但查询仅匹配test.
我想匹配所有这些:(test, t\xc3\xa9st, t\xc3\xa8st, t\xc3\xabst因为它可以与mysql_set_charset)
编辑:
\n\nSET NAMES utf8更有可能...数据库使用utf8 编码,不幸的是内容是从网络填充的,没有mysql_set_charsetnor SET NAMES。
目前,如果使用这些函数,结果会很混乱。
\n\nversion() 5.1.41-3ubuntu12.9
编辑2:
\n\n当我使用SET NAMES utf8它时,它们只匹配t\xc3\xa9st,它们看起来像t\xc3\x83\xc2\xa9st
当我使用iconv("UTF-8", "ISO-8859-1", $name)它时仅匹配test
在查询之前尝试:
mysql_query("SET NAMES 'utf8'", $conn);
Run Code Online (Sandbox Code Playgroud)
编辑
显然,根据 MySQL 版本,您可能还需要使用:
mysql_query("SET CHARACTER SET utf8", $conn);
Run Code Online (Sandbox Code Playgroud)
最后一点,数据库需要使用 UTF-8 字符集,以确保这一点:
ALTER <database_name> DEFAULT CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud)
更多编辑
阅读您的编辑后,我认为这是您的 HTML/PHP 编码的问题。在提交字符的页面上,确保正确设置标题:
header('Content-Type: text/html; charset=UTF-8');
Run Code Online (Sandbox Code Playgroud)
您还应该通过元标记进行设置:
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
Run Code Online (Sandbox Code Playgroud)
然后使用 [ ][1] 函数设置多字节编码mb_internal_encoding():
mb_internal_encoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)
默认情况下 PHP 使用 ISO-8859-1。[1]: https: //www.php.net/mb_internal_encoding