PHP/MySQL中的特殊字符

Jon*_*han 19 php mysql special-characters

我在数据库中有包含特殊字符的单词(主要是西班牙语,如波浪号).在数据库中,所有内容都保存并使用PHPmyAdmin正确显示,但是当我获取数据(使用PHP)并在浏览器中显示时,我得到一个奇怪的字符,如"?" 有一个正方形...我需要一个通用的修复,所以我不需要每次都逃避每个字符,而且我也可以将PHP格式的特殊西班牙语字符插入到数据库中...

HTML是正确的:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)

所有表和数据库都设置为utf8_spanish

我得到的角色:

有什么建议???

谢谢!!!

Ste*_*rig 31

我想提供一些关于vartec提出的解决方案的更多细节,这是(根据您的MySQL安装)最正确的问题解决方案.首先,MySQL中的字符集/编码问题是一个有点复杂的主题,在MySQL手册第9.1章"字符集支持"中有详细介绍.在你的情况下特别是9.1.4."连接字符集和排序"将是最相关的.

简而言之:MySQL必须知道客户端应用程序的哪个字符集/编码(从数据库说话,这是你的PHP脚本)所期望的,因为它将转换来自server-中定义的内部字符集/编码的所有字符串数据,数据库,表或列级别进入连接字符集/编码.您在客户端使用UTF-8,因此必须告诉MySQL您使用的是UTF-8.这是通过MySQL命令完成的,该命令SET NAMES 'utf8'必须作为打开连接的第一个查询发送.根据您的安装以及您在PHP脚本中使用的MySQL客户端库,这可以在每次连接时自动完成.

如果您使用PDO,只需设置配置参数即可

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
Run Code Online (Sandbox Code Playgroud)

使用mysqli更改客户端字符集/编码更加简单:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");
Run Code Online (Sandbox Code Playgroud)

我希望这将有助于使整个事情更容易理解.


Qua*_*noi 10

SET NAMES 'utf8'连接后立即发行:

$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES 'utf8'");
Run Code Online (Sandbox Code Playgroud)


var*_*tec 9

让MySQL自动翻译它

$conn = mysql_connect('host', 'user', 'password');
mysql_set_charset('utf8',$conn);
Run Code Online (Sandbox Code Playgroud)

http://es.php.net/manual/en/function.mysql-set-charset.php

编辑:从我的评论中我收集到,这实际上是用latin1编码的

mysql_set_charset('latin1_spanish_ci',$conn);
Run Code Online (Sandbox Code Playgroud)


小智 5

我从某个地方发现了这个,从那时起就一直在使用它,没有想太多。

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");
Run Code Online (Sandbox Code Playgroud)


Jon*_*han 4

将 HTML 字符集更改为 ISO-8859-1 解决了问题!愚蠢的

  • 您阅读了我对您的问题的回答吗?更改 HTML 页面的字符集需要将静态 HTML 内容重新编码为 ISO-8859-1 字符集。使用正确的 MySQL 客户端编码将是最简单的解决方案。 (2认同)