2

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 として提供されているかどうかも確認しました (そうです)。

このエンコーディングの問題を解決する方法を知っている人はいますか?

4

1 に答える 1

0

解決策が見つからないため、これを削除します。email() 関数も安全ではなく、私は phpmailer または swiftmailer のいずれかを使用する予定です (後者に傾いています)。

于 2013-02-08T17:50:30.623 に答える