迁移数据,从latin1 charset迁移到UTF-8

时间:2012-02-01 00:02:18

标签: php wordpress migration

我正在尝试将使用latin1字符集的定制CMS中的某些鱼类信息配置文件转移到使用UTF-8的WordPress自定义(自定义帖子类型,包含多个元字段)数据库。< / p>

最重要的是,旧的CMS使用一些奇数bbCode位。

基本上,我正在寻找能够做到这一点的功能:

  • 使用latin1_swedish_ci排序规则(以及latin1字符集)从旧数据库中获取信息
  • 将所有非标准字符(我们的语言包括但不包括克罗地亚语,捷克语,西班牙语,法语和德语)转换为HTML实体,例如&aacute;&134;等数字很好)。
  • 将所有bbCode(见下文)转换为HTML
  • '"转换为HTML实体
  • utf-8 charset的信息返回到我的新数据库

bbCode tofrom是:

$search = array( '[i]', '[/i]', '[b]', '[/b]', '[pl]', '[/pl]' );
$replace = array( '<i>', '</i>', '<strong>', '</strong>', '', '' );

到目前为止我尝试过的功能是:

$search = array( '[i]', '[/i]', '[b]', '[/b]', '[pl]', '[/pl]' );
$replace = array( '<i>', '</i>', '<strong>', '</strong>', '', '' );

function _convert($content) { 
    if(!mb_check_encoding($content, 'UTF-8') 
        OR !($content === mb_convert_encoding(mb_convert_encoding($content, 'UTF-32', 'UTF-8' ), 'UTF-8', 'UTF-32'))) { 

        $content = mb_convert_encoding($content, 'UTF-8'); 

        if (mb_check_encoding($content, 'UTF-8')) { 
            return $content;
        } else { 
            echo "<p>Couldn't convert to UTF-8.</p>";
        } 
    } 
} 

function _clean($content) {
    $content = _convert( $content );
    /* edited out because otherwise all HTML appears as &lt;html&gt; rather than <html>
    //$content = htmlentities( $content, ENT_QUOTES, "UTF-8" );
    $content = str_replace( $search, $replace, $content );

    return $content;
}

然而,这会阻止某些字段导入到新数据库,而不是替换bbCode。

如果我使用以下代码,它主要起作用:

$var = str_replace( $search, $replace, htmlentities( $row["var"], ENT_QUOTES, "UTF-8" ) );

但是,包含我认为捷克语/克罗地亚语字符的某些字段根本不显示。

有没有人有任何建议,我可以按照上面列出的顺序成功将信息从“旧格式”转换为新格式?

1 个答案:

答案 0 :(得分:2)

我想说如果您想要转换所有非ASCII字符,则不需要进行任何latin1UTF-8转换。假设您在数据上运行htmlspecialcharshtmlentities等函数,则所有非ASCII字符都将替换为相应的实体代码。

基本上,在此步骤之后,不应该有任何需要转换为UTF-8的字符。另外,如果您想将latin1编码字符串转换为UTF-8,我强烈怀疑utf8_encode会很好。

PS。在将bbCode转换为HTML时,我建议使用正则表达式。例如,你可以像这样做一行:

$html_data = preg_replace('/\[(/?[a-z]+)\]/i', '<$1>', $bb_code_data);