gpt4 book ai didi

php - 不正确的字符串编码

转载 作者:行者123 更新时间:2023-11-29 00:59:08 26 4
gpt4 key购买 nike

注意:我已经阅读了所有通常建议的相关 PHP、UTF-8、字符编码文章,但我的问题涉及在我应用此类技术之前插入的数据。我希望追溯修复所有字符编码问题。

现在所有连接都使用 PDO 设置为 utf8。

PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'

不幸的是,在我实现正确的字符编码实践之前,插入了大量编码有问题的数据。如显示:

$sql = "SELECT name FROM data LIMIT 3";

foreach ($pdo->query($sql) as $row)
{
$name = $row['name'];

echo $name . "\n";
echo utf8_encode($name) . "\n";
echo utf8_decode($name) . "\n";
echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . "\n";
echo htmlspecialchars(utf8_encode($name), ENT_QUOTES, 'UTF-8') . "\n";
echo htmlspecialchars(utf8_decode($name), ENT_QUOTES, 'UTF-8') . "\n";
echo '<hr/>';
}

产生:

Antonín Dvořák
AntonÃÆín DvoÃâ¦Ãâ¢ÃÆák
Anton�?­n Dvo�?�?�?¡k
Antonín Dvořák
AntonÃÆín DvoÃâ¦Ãâ¢ÃÆák

----------
Ô±Ö€Õ¡Õ´ Ô½Õ¡Õ¹Õ¡Õ¿Ö€ÕµÕ¡Õ¶
ñÃâ¬Ã¡Ã´ ýáùáÿÃâ¬ÃµÃ¡Ã¶
Ա�?ամ Խաչատ�?յան
Ô±Ö€Õ¡Õ´ Ô½Õ¡Õ¹Õ¡Õ¿Ö€ÕµÕ¡Õ¶
ñÃâ¬Ã¡Ã´ ýáùáÿÃâ¬ÃµÃ¡Ã¶

----------
Tiësto
Tiësto
Tiësto
Tiësto
Tiësto
Tiësto
----------

当使用 PDO 删除“SET NAMES utf8”时,它会生成数据,该数据实际上具有正确的项目,尽管在不同的行中:

Antonín DvoÅák
Antonín DvoÃÂák
Antonín Dvořák
Antonín DvoÅák
Antonín DvoÃÂák
Antonín Dvořák
----------
Արամ Խաչատրյան
Ô±ÖÕ¡Õ´ Ô½Õ¡Õ¹Õ¡Õ¿ÖÕµÕ¡Õ¶
???? ?????????
Արամ Խաչատրյան
Ô±ÖÕ¡Õ´ Ô½Õ¡Õ¹Õ¡Õ¿ÖÕµÕ¡Õ¶
???? ?????????
----------
Tiësto
Tiësto
Ti�sto
Tiësto
Tiësto

----------

这里是相关数据库行的转储:

DROP TABLE IF EXISTS `data`;
CREATE TABLE IF NOT EXISTS `data` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(80) NOT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`(10)),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;

INSERT INTO `data` (`id`, `name`) VALUES (0, 'Antonín Dvořák'), (1, 'Արամ Խաչատրյան'), (2, 'Tiësto');

第 3 行“Tiësto”的第 3 行和第 6 行随后被正确回显。我只是不确定更正编码/检测错误字符串的编码并更正等的最佳方法是什么。

最佳答案

应该工作的一种方法——我自己还没有尝试过——是使用 phpMyAdmin 将数据库转储到一个文件中,导入它,然后指定 latin1 作为编码,即使它是 UTF-8 编码的。 (您需要提供在导入时在下拉菜单中指定转储文件字符集的 phpMyAdmin 版本)。

这应该将 ë 变回 ë。如果数据一直损坏(即它不是有效 UTF-8 字符和损坏字符的混合),这可能会起作用。

显然,在尝试此操作之前先进行备份,然后再仔细梳理数据。

关于php - 不正确的字符串编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4535425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com