web-dev-qa-db-ja.com

utf8文字をiso-88591に変換し、PHP

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

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

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

ISO形式で記述できない文字はないと思うので、大きな問題にはなりません。

42
qualbeen

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を必要とします。

118
Stefan Gehrig

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

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

それでも、utf8_encodeおよびutf8_decodeはISO-8859-1で動作するはずです。ファイルへのリンクまたは encoded または base64 変換が失敗するか予期しない結果をもたらす文字列の例を投稿できると便利です。

6
phihag

使用する方がはるかに良い

$ value = mb_convert_encode($ value、 'HTML-ENTITIES'、 'UTF-8');

特にAJAX 'ISO-8859-1'文字を送信するためのコール。

1
VINAY KANT

頭のメタタグを

 <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);

その方法は私が使用し、たくさん助けます。ありがとう!

1
user2842936

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

$dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), 'utf-8', basename($thisFile['path']))) );
0
user109764

私が使用した:

function utf8_to_html ($data) {
    return preg_replace(
        array (
            '/ä/',
            '/ö/',
            '/ü/',
            '/é/',
            '/à/',
            '/è/'
        ),
        array (
            '&auml;',
            '&ouml;',
            '&uuml;',
            '&eacute;',
            '&agrave;',
            '&egrave;'
        ),
        $data 
    );
}
0
tommystyle

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

0

html_entity_decode()およびhtmlentities()を使用します。

_$html = html_entity_decode(htmlentities($html, ENT_QUOTES, 'UTF-8'), ENT_QUOTES , 'ISO-8859-1');
_

htmlentities()は入力を_UTF8_にフォーマットし、html_entity_decode()はそれを_ISO-8859-1_にフォーマットし直します。

0
Fernando CR

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

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

0
Ignacio Pascual