gpt4 book ai didi

php - 将 UTF8 表上的 latin1 字符转换为 UTF8

转载 作者:IT老高 更新时间:2023-10-28 12:57:54 26 4
gpt4 key购买 nike

直到今天我才意识到我的 PHP 脚本中缺少这个:

mysql_set_charset('utf8');

我所有的表都是 InnoDB,排序规则“utf8_unicode_ci”,我所有的 VARCHAR 列也是“utf8_unicode_ci”。我的 PHP 脚本上有 mb_internal_encoding('UTF-8');,我所有的 PHP 文件都编码为 UTF-8。

所以,直到现在,每次我“插入”带有变音符号的东西时,例如:

mysql_query('INSERT INTO `table` SET `name`="Jáuò Iñe"');

在本例中,“名称”内容为:Jáuò Iñe

由于我修复了 PHP 和 MySQL 之间的字符集,新的 INSERT 现在可以正确存储。但是,我想修复目前“困惑”的所有旧行。我已经尝试了很多东西,但它总是会破坏第一个“非法”字符的字符串。这是我当前的代码:

$m = mysql_real_escape_string('¿<?php echo "¬<b>\'PHP &aacute; (á)ţăriîş </b>"; ?> ă-ţi abcdd;//;ñç´พดแทฝใจคçăâξβψδπλξξςαยนñ ;');
mysql_set_charset('utf8');
mysql_query('INSERT INTO `table` SET `name`="'.$m.'"');
mysql_set_charset('latin1');
mysql_query('INSERT INTO `table` SET `name`="'.$m.'"');
mysql_set_charset('utf8');

$result = mysql_iquery('SELECT * FROM `table`');
while ($row = mysql_fetch_assoc($result)) {
$message = $row['name'];
$message = mb_convert_encoding($message, 'ISO-8859-15', 'UTF-8');
//$message = iconv("UTF-8", "ISO-8859-1//IGNORE", $message);
mysql_iquery('UPDATE `table` SET `name`="'.mysql_real_escape_string($message).'" WHERE `a1`="'.$row['a1'].'"');
}

它使用预期的字符“更新”,除了字符串在字符“ă”之后被截断。我的意思是,该字符和后面的字符不包含在字符串中。

此外,使用“iconv()”(在代码上注释)进行测试也是如此,即使使用//IGNORE 和//TRANSLIT

我还测试了几个字符集,介于 ISO-8859-1 和 ISO-8859-15 之间。

最佳答案

根据您的描述,您的 UTF-8 数据似乎最初存储为 Latin-1,然后未正确转换为 UTF-8。数据可恢复;你需要一个像

这样的 MySQL 函数
convert(cast(convert(name using  latin1) as binary) using utf8)

您可能需要省略内部转换,具体取决于编码转换期间数据的更改方式。

关于php - 将 UTF8 表上的 latin1 字符转换为 UTF8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9407834/

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