the*_*cus 2 php mysql utf-8 character-encoding
我的MySQL数据库设置为utf8_unicode_ci,并且我有$ pdo-> exec('SET NAMES"utf8"')作为以下php代码的一部分,但当我从查询中回显一个连字符的文本时 - 看起来像这样 - ..我做错了什么,为什么连字符没有正确显示?
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=danville_tpf', 'danville_dan', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');
} catch (PDOException $e) {
$output = 'Unable to connect to the database server.';
include 'output.html.php';
exit();
}
$output = 'Theme Park Database initialized';
//include 'output.html.php';//
try {
$park_id = $_GET['park_id'];
$query = "SELECT * FROM tpf_parks WHERE park_id = $park_id";
$result = $pdo->query($query);
} catch (PDOException $e) {
$output = 'Unable to connect to the database server.';
//include 'output.html.php';//
}
$output = 'Sucessfully pulled park';
//include 'output.html.php';//
foreach ($result as $row) {
$parkdetails[] = array(
'name' => $row['name'],
'blurb' => $row['blurb'],
'website' => $row['website'],
'address' => $row['address'],
'logo' => $row['logo']
);
}
?>
Run Code Online (Sandbox Code Playgroud)
请帮忙.
–是一个常见的mojibake为一个短划线(–),这是一个与连字符不同的字符.
它是采用UTF-8编码形式的破折号(0xe2 0x80 0x93)并错误地假设它实际上是使用Windows-1252编码的结果.
解读这三个字节的Windows-1252: 0xe2,0x80和0x93分别表示â,€和“.
假设违规字符在blurb字段中,如果查询SELECT HEX(blurb) FROM tpf_parks(使用合适的WHERE子句),您将看到有问题字节的十六进制编码.
如果您E28093在那里看到,那么数据库值被正确编码为UTF-8,并且您的客户端或服务器配置中将存在字符编码不匹配.
但是,如果您看到C3A2E282ACE2809C,则该字符已在数据库中编码错误 - 即解释不正确,然后保存为这3个字符的UTF-8表示.如果是这种情况,您需要更新数据以解决问题.你可以这样做iconv:
$fixedData = iconv("utf-8", "windows-1252", $badData);
Run Code Online (Sandbox Code Playgroud)
这会将双重转换后的字节转换回UTF-8编码.
| 归档时间: |
|
| 查看次数: |
1693 次 |
| 最近记录: |