我試圖從一個定製的CMS使用latin1
字符集將一些魚物種信息配置文件移至使用UTF-8
的WordPress自定義(自定義帖子類型,具有多個元字段)數據庫。將數據從latin1字符集遷移到UTF-8
最重要的是,舊的CMS使用一些奇數的bbCode位。
基本上,我正在尋找一個功能,將做到這一點:
- 從我的舊數據庫中獲取信息與
latin1_swedish_ci
整理(和latin1
字符集) - 轉換所有非標準的字符(我們擁有包括克羅地亞語,捷克語,西班牙語,法語和德語在內的各種語言的字符到HTML實體,如
á
(數字如&134;
也很好)。 - 轉換所有BB代碼(見下文),以HTML
- 轉換
'
和"
爲HTML實體 - 返回與
utf-8
字符集的信息,我的新的數據庫
BB代碼to
和from
是:
$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 <html> 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"));
然而,含有一定的領域是什麼,我認爲是捷克/克羅地亞的字符不會出現在所有。
有沒有人有任何建議,我可以按照上面列出的順序成功地將信息從「舊格式」轉換爲新的?
從latin1轉換到'&134;'並不完全是「使用UTF-8」。爲什麼這個而不是真正的UTF-8? – deceze 2012-02-01 00:50:00
我必須承認,我並不知道任何關於charsets的知識或瞭解他們的工作方式。這篇文章背後的「關鍵事實」基本上是這樣的:當我遷移到我的新數據庫時,某些字段沒有被WordPress識別。當我減少這個問題時,我發現它是導致問題的非標準字符。進一步研究,我推測 - 在這篇文章的指導下[http://wordpress.stackexchange.com/questions/40770/problem-with-serialized-arrays-in-custom-meta] - 這將是因爲字符集差異。 – dunc 2012-02-01 11:10:00