2013-06-20 24 views
7

私は、次のアドレス行います(DOMPDFのlibがプラハ5、旧市街、私はPDFファイルに書き込むことができます前に、この文字列にutf8_decode()関数を使用する必要がPHP UTF8デコード号

使用します)。

ただし、上記のアドレス行のphp utf8デコード機能は正しくない(またはむしろ不完全である)ようです。

次のコード:

プラハ5、凝視M STO、

Eがデコードなっていない理由を任意のアイデア?

<?php echo utf8_decode('Praha 5, Staré Město,'); ?> 

はこれを生成しますか?

+0

utf8_decodeは、UTF-8でエンコードされた文字列を変換するだけです。文字列はutf8_encodedですか? –

答えて

14

utf8_decodeは、文字列をUTF-8エンコーディングからISO-8859-1、a.k.a. "Latin-1"に変換します。
Latin-1エンコーディングは "ě"という文字を表すことはできません。それは簡単です。
「デコード」は総称的な誤称であり、iconv('UTF-8', 'ISO-8859-1', $string)と同じです。 を参照。

+0

最高の答え(2015)+1 – delive

+1

@deceze utf8_decodeは、文字列をUTF-8エンコーディングからISO-8859-1に変換します。 これはおそらく数時間の節約になりました!あなたが私たちのオフィスにいた場合、喜んで飲み物を買うでしょう:) – whizzkid

+0

@whizzkid次回ドイツにいる時に私に打ちなさい...; o) – deceze

0

あなたはそれを必要としない(@Rajeev:この文字列は自動的にUTF-8でエンコードされたとして検出されます。

echo mb_detect_encoding('Praha 5, Staré Město,'); 

は常にUTF-8が返されます。)。

あなたはかなり見たい: https://code.google.com/p/dompdf/wiki/CPDFUnicode

+0

私はutf8_decodeを削除し、を設定し、DOMPDF_UNICODE_ENABLEDもconfig。しかし、それは動作しません、と表示される? – Latheesan

+0

私は 'Helvetica'フォントを使用しています。その理由は? – Latheesan

+0

別のフォントをインストールする必要があります。ここでの回答を確認してください:http://stackoverflow.com/questions/990181/dompdf-problem-with-cyrillic-characters – scraaappy

0

私は自家製のUTF-8/UTF-16のデコード機能を(&番号NUMBERに変換、表現)を使用して巻き取る、私は任意のパターンを発見していませんUTF-8が検出されない理由は、 "encoded-as"シーケンスが返される文字列内の常に同じ位置にあるとは限りませんからです。あなたはそれについていくつかの追加チェックをするかもしれません。

3文字のUTF-8インジケータ:$ startutf8 = chr(0xEF).chr(187).chr(191); (最初の3文字だけでなく、この文字列が表示されていれば、その文字列はUTF-8でエンコードされます)

UTF-8ルールに従ってデコードします。あなたは、これらのデータ'Praha 5, Staré Město,'からを取得した場合、その後も、必要は、utf8_decodeを使用しないように、あなたのPHPファイルのエンコーディングでは、UTF-8エンコーディングでファイルを保存している

function charset_decode_utf_8 ($string) { 
/* Only do the slow convert if there are 8-bit characters */ 
/* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */ 
if (! ereg("[\200-\237]", $string) and ! ereg("[\241-\377]", $string)) 
    return $string; 

// decode three byte unicode characters 
$string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",  
"'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'", 
$string); 

// decode two byte unicode characters 
$string = preg_replace("/([\300-\337])([\200-\277])/e", 
"'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'", 
$string); 

return $string; 
} 
0

問題を使用して:これは、バイトでバイトを通じてchugged以前のバージョンを置き換えますデータベースをよりよく変更するにはUTF-8