ホームページ  >  記事  >  バックエンド開発  >  [まとめ+考察] PHP文字列フィルタリング各種関数アプリケーション

[まとめ+考察] PHP文字列フィルタリング各種関数アプリケーション

WBOY
WBOYオリジナル
2016-06-13 13:14:27729ブラウズ

【まとめ+考察】PHPの文字列フィルタリング各種関数適用
まずは自省…正規表現が下手なので書いたフィルタリング条件は基本的に失敗してます…
無理ですオンラインで確認した機能を理解しました。変更した後でも問題が発生しました。

さまざまな csdn の神の指導の下、少し啓発されました... 元の質問投稿へのリンク

では各パスの機能を公開していますので、亡くなった方でもまだ死んでいない方でもご利用いただけます。
よく使われる方法を積極的に追加して投稿していただければ幸いです。

基本機能
---------------------- ---------------------------- ---------------
実際、mysql と php には、文字の問題に対処するために使用できる多くの関数が付属しています。
ps: 以来。 php6 は、magic_quotes_gpc をサポートしていません。以下のものは、magic_quotes_gpc=off の条件下であると想定されます (php6 でどのような新しいものがリリースされるかはわかりません...)

mysql_real_escape_string()
定義: この関数は、SQL ステートメントで使用される文字列内の特殊文字をエスケープします。
構文: mysql_real_escape_string(string,connection)
説明: この関数は string 内の特殊文字をエスケープし、接続の現在の文字セットを考慮するため、mysql_query() で安全に使用できます。
コード例は長すぎるため、関数の説明リンクを示します。 w3school phpnet

addSlashes()
定義:addslashes() 関数は、指定された定義済み文字の前にバックスラッシュを追加します。
構文: addedlashes(string)
注: デフォルトでは、PHP 命令 magic_quotes_gpc がオンになっており、すべての GET、POST、COOKIE データに対して addlashes() が自動的に実行されます。 magic_quotes_gpc によってエスケープされた文字列に対して addslashes() を使用しないでください。二重エスケープが発生するためです。この状況が発生した場合は、関数 get_magic_quotes_gpc() を使用して検出できます。
コード例は長すぎるため、関数説明のリンクを貼っておきます。 w3school phpnet
関連関数
StripSlashes() はバックスラッシュ文字を削除します。 (フィルタ文字の説明時に使用します)

mb_convert_encoding()
PHP の内部コード変換関数
バージョン (PHP 4 >= 4.0.6, PHP 5)
この関数はさまざまな相互コードを変換できますエンコーディング間の変換
関連リンク phpnet

iconv()
php の内部コード変換関数、同上
iconv() は gb2312 の変換にバグがあるため、それを処理する必要がありますこのように

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->iconv( "UTF-8", "gb2312//IGNORE" , $str)

ignore は、文字 "-" を gb2312 に変換するときにエラーになることがわかります。無視パラメータ、この文字に続くすべての文字列 何も保存できません。
さらに、mb_convert_encoding にはこのバグがないため、次のように記述するのが最善の方法です:
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->mb_convert_encoding($str,"gb2312", "UTF-8");

ただし、最初に mbstring 拡張ライブラリを有効にする必要があります。
mysql データベースの照合順序を utf-8 に設定し、変換に使用しないこともできます
3 つの mysql マントラ
SQL コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
SET NAMES utf8;
SET CHARACTER SET utf8;
SET COLLATION_CONNECTION='utf8_general_ci';


関連リンク phpnet
情報参照 link1 link2 link3

カスタム機能 1
----------------------------- ---------------
GB2312をネット上にある変換関数を使ってutf-8に変換すると変換エラーが発生し中国語が解析できなくなります。 ... 定期的な狂人を楽しみにしています ...
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?php
function escape($str) {
         preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);
        $ar = $r[0];
        foreach($ar as $k=>$v) {
                 if(ord($v[0]) < 128)
                            $ar[$k] = rawurlencode($v);
                 else
                            $ar[$k] = "%u".bin2hex(iconv("GB2312","UCS-2",$v));
                                                     }
        return join("",$ar);
}

function unescape($str) {
       $str = rawurldecode($str);
       preg_match_all("/(?:%u.{4})|.+/",$str,$r);
       $ar = $r[0];
       foreach($ar as $k=>$v) {
                if(substr($v,0,2) == "%u" && strlen($v) == 6)
                $ar[$k] = iconv("UCS-2","GB2312",pack("H4",substr($v,-4)));
                  }
       return join("",$ar);
}
?>


カスタム関数 2
----------- -------------- ------------------------
フォーラム ginzai777、専門家に感謝しますは異なります。一目で問題がわかります....
将来的には、この行を PHP フィルタリングに使用することになり、ファイルのエンコーディングについて心配する必要はなくなります....
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?php
function addslashes_str($str){
$str=addslashes($str);
$str=str_replace($str,";",'\;');
return $str;
}
function stripslashes_str($str){
$str=stripslashes($str);
$str=str_replace($str,'\;',";");
return $str;
}
?>


------ ------------------------ -------------------
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。