2016-05-04 14 views
1

で同じASCII文字列に異なる種類の2同様に見えるドイツ語の文字を変換し私はこれらの2つの文字列を持っているPHP

string(3) "Ö" 
string(2) "Ö" 
e1: UTF-8, e2: UTF-8 

彼らがいないだけであるようですドイツ語の文字はなく、それらのそれぞれが異なるので、このよう

PHP: Replace umlauts with closest 7-bit ASCII equivalent in an UTF-8 string

にASCIIに変換されます3210

は同等の結果を生成しません。これらの文字列の両方をこれらのASCII形式のいずれかに変換する方法はありますかBNOEまたはBNO


私は多分私は両方からÖをコピーして、strtr検索に含めると、配列を置き換えることができることを知っているが、私はすべて別文字を再現する方法がわからない、最初のOSであるのと同じ方法でエンコードされました。

答えて

1

iconvを使用して入力をutf-8に変換してから、変換をASCIIに適用することができます。現在のエンコーディングを検出するには、mb_detect_encodingを使用できます。

$aUTF8 = iconv(mb_detect_encoding($a, 'UTF-8, ISO-8859-1', true), 'UTF-8', $a); 
$bUTF8 = iconv(mb_detect_encoding($b, 'UTF-8, ISO-8859-1', true), 'UTF-8', $b); 

$aASCII = iconv("utf-8", "ascii//TRANSLIT", $aUTF8); 
$bASCII = iconv("utf-8", "ascii//TRANSLIT", $bUTF8); 

あなたがmb_detect_encodingのエンコーディングリストに追加エンコーディングを追加する必要がある場合がありますのでご注意ください。

0

Andreasの答えを拡張しました。これらの文字は、文字+合成分音(U-0308)です。私はそれらを検索して標準のウムラウトに置き換え、必要なものに置き換えました。

function convertToUmlauts($str) { 
    $srp_array = ['Ö' => 'Ö', 'Ä' => 'Ä', 'Ü' => 'Ü', '̈a' => 'ä', 'ö' => 'ö', 'ü' => 'ü']; 
    return strtr($str, $srp_array); 
} 
2

これらは、Unicodeで同じ文字を表す2つの異なる形式です。 1つはOと結合dieresesの組み合わせ、もう1つは文字Öです。 Unicode allows either variant to express "Ö".

Normalizer::normalizeを使用し、そのあなたの好ましい変形にを正規化:

$str = Normalizer::normalize('Ö', Normalizer::FORM_C); 

多分あなたは "O"(単一文字の形)に収束するフォームCを、したいです。あなたが "O" +ダイレを組み合わせることを好むなら、代わりにフォームDを使います。