2011-08-15 11 views
10

私はmysqlにインポートされているいくつかの乱雑なデータに対していくつかのデータクレンジングを行っています。'u00e9'をmysqlまたはphpのutf8 charに変換するには?

データは実際には「u00e9」などとして、文字列の中に埋め込まれて「擬似」Unicodeの文字、

が含まれているので、一つのフィールドがあるかもしれない..「Jalostotitlu00e1n」 私は不器用な「u00e1nをリッピングする必要があります対応するutf文字に置き換えてください

これは、部分文字列とCHRを多分使用してmysqlで行うことができますが、PHP経由でデータをpreprocssingするので、私もそこで実行できます。

私はutfデータを扱うためにmysqlとphpを設定する方法についてすでに知っています。この問題は実際にインポートするソースデータImにのみあります。

ありがとうございました

+2

ANSIに「UTF-8文字」としてのもの。おそらく、あなたは "そのコードポイントでUnicode文字のUTF-8エンコーディング"を意味するでしょう。 –

+0

@Ignacio確かに、「UTF-8文字」を「Unicode文字をエンコードする1,2,3,4バイトのシーケンス」と定義します。それは有効な定義ですか? – deceze

+1

@deceze:技術的には「UTF-8シーケンス」と呼ばれています。 –

答えて

10

方法があります。すべてuXXXXをHTML表現に置き換えて、html_entity_decode()

などを実行します。 echo html_entity_decode("Jalostotitlán");

u1234の形式のすべてのUTF文字は、ሴとしてHTMLで印刷できます。 UTFシーケンスの開始を識別する他の文字がない場合は、誤検出が多い可能性があるため、置き換えを実行するのは非常に困難です。簡単な正規表現は

preg_replace('/u([\da-fA-F]{4})/', '&#x\1;', $str)

+0

私が考えていなかったおかげで素敵な簡単な解決策。私が修正しようとしているデータに数値が含まれていてはいけないので、これを使うのが安全だと思います。彼らが行う唯一の理由は、UTFの混乱のためです。したがって、これらは識別しやすいはずです – carpii

+1

注意してください!あなたのデータが本当に制限されていない限り、あなたはこれほど悪いデータマングリングから確実に回復することはできません。どのようなu-hex-hex-hexシーケンスをmangled Unicodeのエスケープとして使うかは、例えば "persuaded"という言葉を "pers귭"に変えます。 – bobince

+0

@bobince正しいので、 "偽陽性"。識別子を持つことがとても重要です。 – rabudde

2

私のTwitterのタイムラインスクリプトは、私はバックスラッシュを剥奪し、彼にpreg_replace @rubbude使用u00e9 \にéなどの特殊文字を返す可能性があります。

// Fix uxxxx charcoding to html 
$str  = str_replace('\u','u',$json); 
$strJSON = preg_replace('/u([\da-fA-F]{4})/', '&#x\1;', $str); 

それは私のためにworkes、それはターン: De #Haarstichting is h\u00e9t medium voor alles 中に、:コンバートUTF8のHTMLのための De #Haarstichting is hét medium voor alles

+2

いいえ! '\ u'からバックスラッシュを取り除かないでください。これは識別子として使用できるからです。変更された正規表現 'preg_replace( '/ \\ u([\ da-fA-F] {4})/'、 '&#x\1;'、$ str)'を代わりに使用してください – rabudde

+0

それは私が必要です。 Offcourse私の剥奪は間違っている、それは私が持っていた唯一の識別子を削除します。ありがとうございました@rabbude私は今夜これをテストしており、あなたのpreg_replaceでこの答えを更新します。 – Theo

+1

右@rabbude、なぜ私は自分自身を使わなかったのか覚えています: '警告:preg_replace()[function.preg-replace]:コンパイルに失敗しました:PCREは\ L、\ l、\ Nをサポートしていません{名前}、\ U、またはオフセット1の\ u – Theo

10

/* 機能PHPはそのようなありません */

public static function Utf8_ansi($valor='') { 

    $utf8_ansi2 = array(
    "\u00c0" =>"À", 
    "\u00c1" =>"Á", 
    "\u00c2" =>"Â", 
    "\u00c3" =>"Ã", 
    "\u00c4" =>"Ä", 
    "\u00c5" =>"Å", 
    "\u00c6" =>"Æ", 
    "\u00c7" =>"Ç", 
    "\u00c8" =>"È", 
    "\u00c9" =>"É", 
    "\u00ca" =>"Ê", 
    "\u00cb" =>"Ë", 
    "\u00cc" =>"Ì", 
    "\u00cd" =>"Í", 
    "\u00ce" =>"Î", 
    "\u00cf" =>"Ï", 
    "\u00d1" =>"Ñ", 
    "\u00d2" =>"Ò", 
    "\u00d3" =>"Ó", 
    "\u00d4" =>"Ô", 
    "\u00d5" =>"Õ", 
    "\u00d6" =>"Ö", 
    "\u00d8" =>"Ø", 
    "\u00d9" =>"Ù", 
    "\u00da" =>"Ú", 
    "\u00db" =>"Û", 
    "\u00dc" =>"Ü", 
    "\u00dd" =>"Ý", 
    "\u00df" =>"ß", 
    "\u00e0" =>"à", 
    "\u00e1" =>"á", 
    "\u00e2" =>"â", 
    "\u00e3" =>"ã", 
    "\u00e4" =>"ä", 
    "\u00e5" =>"å", 
    "\u00e6" =>"æ", 
    "\u00e7" =>"ç", 
    "\u00e8" =>"è", 
    "\u00e9" =>"é", 
    "\u00ea" =>"ê", 
    "\u00eb" =>"ë", 
    "\u00ec" =>"ì", 
    "\u00ed" =>"í", 
    "\u00ee" =>"î", 
    "\u00ef" =>"ï", 
    "\u00f0" =>"ð", 
    "\u00f1" =>"ñ", 
    "\u00f2" =>"ò", 
    "\u00f3" =>"ó", 
    "\u00f4" =>"ô", 
    "\u00f5" =>"õ", 
    "\u00f6" =>"ö", 
    "\u00f8" =>"ø", 
    "\u00f9" =>"ù", 
    "\u00fa" =>"ú", 
    "\u00fb" =>"û", 
    "\u00fc" =>"ü", 
    "\u00fd" =>"ý", 
    "\u00ff" =>"ÿ"); 

    return strtr($valor, $utf8_ansi2);  

} 
+1

便利な機能です。それは私の問題を解決しました。 – pollux1er