8

次の住所行があります: Praha 5, Staré Město,

PDFファイルに書き込む前に、この文字列でutf8_decode()関数を使用する必要があります(domPDF libを使用)。

ただし、上記のアドレス行の php utf8 デコード関数は正しくないように見えます (というか、不完全です)。

次のコード:

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

これを生成します:

Praha 5, Staré M?sto,

ěがデコードされない理由は何ですか?

4

4 に答える 4

14

utf8_decode 文字列を UTF-8 エンコーディングから ISO-8859-1 (別名 "Latin-1") に変換します。
Latin-1 エンコーディングでは、文字「ě」を表すことはできません。それはとても簡単です。
「デコード」はまったくの誤称であり、 と同じことを行いiconv('UTF-8', 'ISO-8859-1', $string)ます。

すべてのプログラマーが、テキストを操作するためのエンコーディングと文字セットについて絶対に、積極的に知っておく必要があることを確認してください。

于 2013-06-20T10:19:43.173 に答える
1

PHPファイルのエンコーディングに問題があります。ファイルをエンコーディングで保存してください。 データベースからこれらのデータを取得する場合は、UTF-8使用する必要はありません。文字セットを次のように変更することをお勧めしますutf8_decode'Praha 5, Staré Město,'UTF-8

于 2014-04-25T10:09:32.850 に答える
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 規則に従ってデコードします。これは、バイトごとに処理する以前のバージョンを置き換えます:using

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;
}
于 2013-08-10T01:25:10.247 に答える