我前段时间在我的数据库和站点中使用了错误的 CHARSET 创建了一个网站。HTML 已设置为 ISO...和DB到拉丁语...,页面以西方拉丁语保存...一团糟。
该网站是法语的,所以我创建了一个函数,将"é"等所有重音替换为" é
"。 这暂时解决了问题。
我刚刚学到了很多关于编程的知识,现在我的文件被保存为 Unicode UTF-8,HTML 是 UTF-8,我的 MySQL 表列设置为 ut8_encoding...
我试图将重音移回"é"而不是"é
",但我遇到了(?或MySQL中和页面显示时的奇怪字符"â"。
我需要找到一种方法来更新我的 sql,通过一个清理字符串的函数,以便它最终可以恢复正常。 目前我的函数看起来像这样,但不起作用:
function stripAcc3($value){
$ent = array(
'à'=>'à',
'â'=>'â',
'ù'=>'ù',
'û'=>'û',
'é'=>'é',
'è'=>'è',
'ê'=>'ê',
'ç'=>'ç',
'Ç'=>'Ç',
"î"=>'î',
"Ï"=>'ï',
"ö"=>'ö',
"ô"=>'ô',
"ë"=>'ë',
"ü"=>'ü',
"Ä"=>'ä',
"€"=>'€',
"′"=> "'",
"é"=> "é"
);
return strtr($value, $ent);
}
欢迎任何帮助。 提前谢谢。 如果您需要代码,请告诉我是哪一部分。
更新
如果你想要赏金点,我需要有关如何操作的详细说明。 谢谢。
请尝试使用以下函数,它应该处理您描述的所有问题:
function makeStringUTF8($data)
{
if (is_string($data) === true)
{
// has html entities?
if (strpos($data, '&') !== false)
{
// if so, revert back to normal
$data = html_entity_decode($data, ENT_QUOTES, 'UTF-8');
}
// make sure it's UTF-8
if (function_exists('iconv') === true)
{
return @iconv('UTF-8', 'UTF-8//IGNORE', $data);
}
else if (function_exists('mb_convert_encoding') === true)
{
return mb_convert_encoding($data, 'UTF-8', 'UTF-8');
}
return utf8_encode(utf8_decode($data));
}
else if (is_array($data) === true)
{
$result = array();
foreach ($data as $key => $value)
{
$result[makeStringUTF8($key)] = makeStringUTF8($value);
}
return $result;
}
return $data;
}
关于如何使用它的具体说明,我建议如下:
- 将旧的拉丁数据库(我希望您仍然拥有它)内容导出为 SQL/CSV 转储 *
- 对文件内容使用上述功能并将结果保存在另一个文件中
- 将您在上一步中生成的文件导入到 UTF-8 感知架构/数据库中
* 示例:
file_put_contents('utf8.sql', makeStringUTF8(file_get_contents('latin.sql')));
如果它不让我知道,这应该可以做到。
您可能想要调查用于修复WP数据库编码问题的内容:
http://codex.wordpress.org/Converting_Database_Character_Sets
长话短说,大多数旧的WP站点都是使用瑞典语/拉丁语1整理表创建的,这些表用于存储UTF8字符串。若要正确整理表,方法是将列更改为二进制类型,然后将其更改为 UTF8 文本。
这样可以避免在直接从 Latin1 转换为 UTF8 时文本出现混乱。
您需要使用例如 iconv 转换有问题的行。您的挑战将是知道哪些行已经是 UTF-8,哪些行是拉丁语 1。
我不完全确定我是否理解你的问题,但是如果你有
-
一个 UTF-8 数据库
-
其中的所有特殊字符都存储为 HTML 实体
然后一个
html_entity_decode($string, ENT_QUOTES, "UTF-8");
应该可以解决问题,并将所有实体重新转换为其 UTF-8 本机字符。
,您的数据库连接也应该使用 utf-8。
$this->db = mysql_connect(MYSQL_SERVER,DB_LOGIN,DB_PASS);
mysql_set_charset ('utf8',$this->getConnection());
如果要与数据库讨论 UTF-8,则必须告诉数据库连接流是 UTF-8 流。在向数据库发出每个请求之前,您必须发送一个请求,此请求在以下:
"设置名称 UTF8";
我个人在 connect.inc.php 文件中使用它,这些文件创建与数据库的连接。其中这个语句数据库知道你发送的UTF-8编码字符串和工作完美!
mysql_set_charset功能运行不佳,我过去尝试过此功能,但事实是它不起作用。
对于您的完整问题,如果要将 latin1 字符串转换为UTF-8,则必须先将 latin1 字符串转换为二进制字符串格式。然后将二进制字符串转换为 UTF-8 字符串,所有这些都可以使用数据库命令在数据库内完成。看到那个 artile(法语):http://www.noidea.ca/2009/06/15/comment-convertir-une-db-de-latin1-a-utf8/
我可以告诉你,这种方法有效,因为我用它来转换我创建的数据库中的数据。