PHP 関数 function_var() の以下のテストケースがあります。
<?php
$inputvalue = "Ž"; //NUM = 142 on the ASCII extended list
$sanitized = filter_var($inputvalue, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH);
echo 'The sanitized output: '.$sanitized."\n"; // --> & #197;& #189; (Å ½)
?>
上記のスニペットを実行すると、期待どおりの出力が返されません。Ž は ASCII 拡張リストの 142 番です (ascii-code[dot]com を参照)。したがって、返されると期待しているのは「& #142;」です。(文字列、スペースなし)。
何が問題なのかを見つけるのに役立ちましたが、まだ解決方法がわかりません。
「Ž」を Hex UTF-8 バイトに変換すると、C5 BD になります。これらの 16 進バイトは、ISO-8859 16 進値に対応しています: Å ½ (参照: http://cs.stanford.edu/~miles/iso8859.html )。これらの 2 文字は、filter_var によって「& #197;& #189;」にデコードされます。
このオンラインコンバーターを参照してください!!!: http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=%C5%BD&mode=char
基本的に何が起こるか: UTF-8 バイトは、Latin-1 文字バイトとして変換するために使用されます。コンバーターのページには、次のように書かれています。「Latin-1 文字としての UTF-8 バイト」は、8 ビット文字しか認識しない端末またはエディターで UTF-8 ファイルを表示するときに通常表示されるものです。
私の編集者が問題だとは思わない。Coda 2 (デフォルトは UTF-8) で Mac を使用しています。このテストは、メタ文字が utf-8 に設定された html5 ページでもテストされています。さらに、デフォルトの XAMPP localhost サーバーを使用しています。Firefox の Firebug を使用して、ファイルが UTF-8 として提供されているかどうかも確認しました (そうです)。
このエンコーディングの問題を解決する方法を知っている人はいますか?