任意の文字セットの下で正常にウェブページを表示する方法1

3231 ワード

回転:coolcode.cn
通常、私たちのウェブページでは、GB 2312、UTF-8、ISO-8859-1などの符号化文字セットを指定します.これにより、私たちが指定した符号化文字をウェブページに表示することができます.しかし、ISO-8859-1でエンコードされたページに漢字を表示したり、GB 2312でエンコードされたページにハングルを表示したりすることを望んでいる可能性があります.もちろん1つの解決策はISO-8859-1またはGB 2312の符号化を使わず、すべてUTF-8の符号化を採用することであり、このような符号化の下で、各国の文字を混合表示することができ、これは現在多くのウェブサイトで採用されている方法である.
私がここで言っているのは、上記の方法ではありません.上記の方法では、文字セットをUTF-8に指定する必要があります.ユーザーが手動で他の文字セットに指定すると、あるいは何らかの理由でその文字セットの設定が機能しなくなり、ブラウザが正しく自動的に認識していない場合、私たちが見ているページは文字化されていません.特にフレームワークで作られたページでは、あるフレームのページが文字セットの設定が機能していない場合、firefoxに文字化けして表示され、まだ変更できません(RightEncodeプラグインをインストールしない場合).
ここで紹介する方法は、WebページをISO-8859-1文字セットに指定しても、漢字や日本語などを正しく表示することができます.原理は簡単で、ISO-8859-1符号化の上位128文字を除くすべての符号化をNCR(Numeric character reference)で表す.たとえば「漢字」という文字は、「漢字」と書くと、任意の文字セットの下で正しく表示されます.この原理に基づいて、既存のページを任意の文字セットの下で表示できるページに変換できるプログラムを書きました.ソースページの文字セットとソースページを指定し、コミットボタンを押すだけで、ターゲットページを得ることができます.いくつかの文字を変換するだけで、文字をテキストボックスに記入し、これらの文字の元の文字セットを指定し、ボタンを押すと、ページに符号化された文字が表示されます.また、WordPressのプラグインも作成しました.今、私のBlogは任意の文字セットの下で正しく表示できます.
変換プログラムのアドレス:http://jb51.net/dxy/nochaoscode/
 
  
function nochaoscode($encode, $str, $isemail = false) {
    $str = iconv($encode, "UTF-16", $str); 
    for ($i = 0; $i         $code = ord($str{$i}) * 256 + ord($str{$i + 1});
        if ($code             $output .= chr($code);
        } else if ($code != 65279) {
            $output .= "".$code.";";
        }
    }
    return $output;
}
$encode = $_POST['encode'];
if ($encode == '') $encode = 'UTF-8';
if ($_FILES['file']['size'] > 0) {
    $data = nochaoscode($encode, file_get_contents($_FILES['file']['tmp_name']));
    header ("Content-type: application/octet-stream;"); 
    header ("Content-length: ".strlen($data)); 
    header ("Content-Disposition: attachment; filename=".$_FILES['file']['name']);
    echo $data;
} else {
    header ("Content-type: text/html; charset=UTF-8"); 
    if ($_POST['email']) {
        echo htmlentities(nochaoscode($encode, $_POST['email'], true));
    }
    else {
        echo htmlentities(nochaoscode($encode, $_POST['content']));
    }
?>

encode: 

file: 




encode: 

content: