HTML エンコード文字列の PHP 処理

巴扎黑
リリース: 2016-11-10 10:16:56
オリジナル
1463 人が閲覧しました

今日、データベースにアクセスするための PHP スクリプトを作成したところ、その中の中国語の文字列が HTML エンコーディングを使用して保存されていることがわかりました (たとえば、漢字「Mao」に対応する HTML エンコーディングは「Mao」です)。このフィールドに対して条件付きクエリを実行することは可能です。クエリに中国語を直接使用することはできませんが、条件一致の前にエンコードに変換する必要があります。

PHP で可読文字と HTML エンコード文字を変換する場合は、htmlentities 関数と html_entity_decode 関数を使用する必要があります。そこで、次のクエリ文

$sql="selectid,depart_name,first_name,last_name,local_name,extension,mobile,title ";
$sql.="frompb_extensione,pb_departmentd ";
$sql.="wheree.depart_id=d.depart_id ";
$sql.="andd.plant='".$plant."' ";
$sql.="and(first_namelike'%".$HTTP_POST_VARS["q"]."%'";
$sql.="orlast_namelike'%".$HTTP_POST_VARS["q"]."%'";
$sql.="orlocal_namelike'%".htmlentities($HTTP_POST_VARS["q"])."%'";
$sql.="orextensionlike'%".$HTTP_POST_VARS["q"]."%'";
$sql.="ormobilelike'%".$HTTP_POST_VARS["q"]."%'";
$sql.="ordepart_namelike'%".$HTTP_POST_VARS["q"]."%'";
$sql.="ortitlelike'%".$HTTP_POST_VARS["q"]."%'";
$sql.=") ";
ログイン後にコピー

を記述して実行します。しかし、何か奇妙なことが起こりました。このステートメントは SQL アナライザでは正しく実行され、結果がクエリされますが、このスクリプトを IE で実行すると、クエリ結果がゼロになるように求められます。これはなぜでしょうか。

この SQL を注意深くチェックし、IE でソース コードを表示した結果、問題の根本原因が見つかりました。クエリ値は、htmlentities 関数によって HTML エンコードに変換されます。このエンコードには特殊文字 & が含まれています (最初の段落の例など)。この文字は IE では別の意味を持ちます。 IE では通常、この記号を表すために「&」が使用されるため、IE で表示される SQL ステートメントの出力は、実際に実行されるステートメントとは異なります。

この問題を解決するには、IE が「&」記号を表すために「&」を使用しないようにする方法を見つける必要があります。いくつか検索した結果、次のコードを使用するとこの問題を解決できることがわかりました。

<?php
$trans=get_html_translation_table(HTML_ENTITIES);
$trans=array_flip($trans);
$encoded="Hallo&<Frau>&Kr&auml;mer";
$original=strtr($encoded,$trans);
echo$original;
?>
ログイン後にコピー

このコードを実行すると、出力される $original 変数の値は "Hallo & & Krämer" となり、まさに私が望む結果になります。

上記は私が仕事で遭遇した問題と解決策であり、同じような問題に遭遇した友人と共有するためにブログに書きました。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!