mySQL 和 PHP 编码

Ten*_*eff 5 php mysql encoding utf-8 iconv

您好,我对此查询有疑问

\n\n
SELECT * FROM table WHERE `name` LIKE \'%t\xc3\xa9st%\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

HMTL 和 SQL 表都有 utf-8 编码,但不幸的是没有mysql_set_charset(\'utf-8\'),我无法使用它。

\n\n

我已经尝试过,iconv("UTF-8", "ISO-8859-1", $name)但查询仅匹配test.

\n\n

我想匹配所有这些:(test, t\xc3\xa9st, t\xc3\xa8st, t\xc3\xabst因为它可以与mysql_set_charset

\n\n

编辑:

\n\n

SET NAMES utf8更有可能...数据库使用utf8 编码,不幸的是内容是从网络填充的,没有mysql_set_charsetnor SET NAMES

\n\n

目前,如果使用这些函数,结果会很混乱。

\n\n

version() 5.1.41-3ubuntu12.9

\n\n

编辑2:

\n\n

当我使用SET NAMES utf8它时,它们只匹配t\xc3\xa9st,它们看起来像t\xc3\x83\xc2\xa9st

\n\n

当我使用iconv("UTF-8", "ISO-8859-1", $name)它时仅匹配test

\n

tpl*_*ner 2

在查询之前尝试:

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