47

私のスクリプトのいくつかは異なるエンコーディングを使用しており、それらを組み合わせようとすると、これが問題になります。

ただし、使用するエンコーディングを変更することはできません。代わりに、スクリプトAの結果のエンコディグを変更し、スクリプトBのパラメーターとして使用します。

つまり、PHPで文字列をUTF-8からISO-88591に変更する簡単な方法はありますか?utf_encodeと_decodeを見てきましたが、それらは私が望むことをしません。「utf2iso()」関数などが存在しないのはなぜですか?

ISO形式で書き込めない文字はないと思いますので、大きな問題にはなりません。

4

10 に答える 10

129

iconv()またはをご覧くださいmb_convert_encoding()。ちなみに、なぜあなたのためutf8_encode()utf8_decode()働いてみませんか?

utf8_decode —UTF -8でエンコードされたISO-8859-1文字の文字列をシングルバイトISO-8859-1に変換します

utf8_encode —ISO-8859-1文字列をUTF-8にエンコードします

だから本質的に

$utf8 = 'ÄÖÜ'; // file must be UTF-8 encoded
$iso88591_1 = utf8_decode($utf8);
$iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $utf8);
$iso88591_2 = mb_convert_encoding($utf8, 'ISO-8859-1', 'UTF-8');

$iso88591 = 'ÄÖÜ'; // file must be ISO-8859-1 encoded
$utf8_1 = utf8_encode($iso88591);
$utf8_2 = iconv('ISO-8859-1', 'UTF-8', $iso88591);
$utf8_2 = mb_convert_encoding($iso88591, 'UTF-8', 'ISO-8859-1');

すべて同じことを行う必要があります-utf8_en/decode()特別な拡張を必要とせず、mb_convert_encoding()ext / mbstringをiconv()必要とし、ext/iconvを必要とします。

于 2008-12-17T12:58:19.773 に答える
6

まず第一に、異なるエンコーディングを使用しないでください。それは混乱につながります、そしてUTF-8は間違いなくあなたがどこでも使うべきものです。

入力がISO-8859-1ではなく、他の何か(ISO-8859-15、Windows-1252)である可能性があります。それらから変換するには、iconvまたはを使用しますmb_convert_encoding

それにもかかわらず、utf8_encodeISO utf8_decode-8859-1で動作するはずです。変換が失敗したり、予期しない結果が生じたりするファイルやuuencodeまたはbase64のサンプル文字列へのリンクを投稿できれば便利です。

于 2008-12-17T13:02:49.420 に答える
1

ヘッドにメタタグを設定する

 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

リンクhttp://www.i18nqa.com/debug/utf8-debug.htmlを使用して、必要な記号文字を置き換えます。

次に str_replace のように使用します

    $find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash
                        $replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”');
$content = str_replace($find, $replace, $content);

その方法は私が使用し、多くのことを助けます。ありがとう!

于 2014-01-24T13:30:32.317 に答える
0

iconvパッケージ、特にそのiconv関数を使用する必要があります。

于 2008-12-17T12:56:21.523 に答える
0

私はこの機能を使用します:

function formatcell($data, $num, $fill=" ") {
    $data = trim($data);
    $data=str_replace(chr(13),' ',$data);
    $data=str_replace(chr(10),' ',$data);
    // translate UTF8 to English characters
    $data = iconv('UTF-8', 'ASCII//TRANSLIT', $data);
    $data = preg_replace("/[\'\"\^\~\`]/i", '', $data);


    // fill it up with spaces
    for ($i = strlen($data); $i < $num; $i++) {
        $data .= $fill;
    }
    // limit string to num characters
   $data = substr($data, 0, $num);

    return $data;
}


echo formatcell("YES UTF8 String Zürich", 25, 'x'); //YES UTF8 String Zürichxxx
echo formatcell("NON UTF8 String Zurich", 25, 'x'); //NON UTF8 String Zurichxxx

私のブログhttp://www.unexpectedit.com/php/php-handling-non-english-characters-utf8で私の関数をチェックして ください

于 2010-08-31T17:37:00.453 に答える
0

私の場合、それらの文字を含む名前のファイルがアップロードされた後、それらは Filezilla でも表示されませんでした! Cpanel filemanager では、? で表示されていました。(黒い背景の下)。そして、この組み合わせにより、ブラウザーで正しく表示されました (HTML ドキュメントは Western エンコードされています)。

$dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), 'utf-8', basename($thisFile['path']))) );
于 2016-11-30T22:21:46.970 に答える
-2
function parseUtf8ToIso88591(&$string){
     if(!is_null($string)){
            $iso88591_1 = utf8_decode($string);
            $iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $string);
            $string = mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8');       
     }
}
于 2012-12-07T12:53:55.303 に答える