フォーム送信における PHP のフィルタリングと特殊文字の処理_PHP チュートリアル
前天天缘把博客文章做过一次内容批量修改,由于在源程序存在BUG,导致很多路径或代码中的反斜杠被无辜去除,昨天通过bankw3000网友的留言才发现这个问题,已做了部分修正不排除还有些路径存在问题,如果大家发现博客上存在路径丢失反斜杠\的问题,欢迎留言反馈,天缘会再做修正。天缘本文特别把PHP关于表单提交特殊字符的处理方法做个汇总,主要涉及htmlspecialchars/addslashes/stripslashes/strip_tags/mysql_real_escape_string等几个函数联合使用,与大家共同交流。
一、几个与特殊字符处理有关的PHP函数
函数名 |
释义 |
介绍 |
htmlspecialchars |
将与、单双引号、大于和小于号化成HTML格式 |
&转成& |
htmlentities() |
所有字符都转成HTML格式 |
除上面htmlspecialchars字符外,还包括双字节字符显示成编码等。 |
|
|
|
addslashes |
单双引号、反斜线及NULL加上反斜线转义 |
被改的字符包括单引号(')、双引号(")、反斜线backslash (\) 以及空字符NULL。 |
stripslashes |
去掉反斜线字符 |
去掉字符串中的反斜线字符。若是连续二个反斜线,则去掉一个,留下一个。若只有一个反斜线,就直接去掉。 |
|
|
|
quotemeta |
加入引用符号 |
将字符串中含有. \\ + * ? [ ^ ] ( $ ) 等字符的前面加入反斜线"\" 符号。 |
nl2br() |
将换行字符转成 |
|
strip_tags |
去掉HTML及PHP标记 |
去掉字符串中任何HTML标记和PHP标记,包括标记封堵之间的内容。注意如果字符串HTML及PHP标签存在错误,也会返回错误。 |
mysql_real_escape_string |
转义SQL字符串中的特殊字符 |
转义\x00 \n \r 空格 \ ' " \x1a,针对多字节字符处理很有效。mysql_real_escape_string会判断字符集,mysql_escape_string则不用考虑。 |
其它字符串处理函数,请参考:PHP常用字符串正则替换及 剖分函数比较。
下面针对常用表单特殊字符处理进行总结:
测试字符串:
1 $dbstr='D:\test
2 http://www.metsky.com,天缘博客
3 \'!=\'1\' OR \'1\'
4
5
6
7
8 PHP 出力" ?>';
テストコード:
01 header("Content-Type: text/html; charset=UTF-8");
02 エコー」 ----------------------------------------------- ----------- -------
rn";
03 echo $dbstr."
rn------------------------------------- -------- ------------------
rn";
04 $str=fnAddSlashes($_POST['dd']);
05 echo $str."
rn------------------------------------- --- -------------------
rn";
06
07 $str = preg_replace("/s(?=s)/","\1",$str);//連続する複数のスペースのうち1つだけを保持
08 $str = str_replace("r","
",$str);
09 $str = str_replace("n","
",$str);
10 $str = preg_replace("/((
)+)/i", "
", $str);//複数の連続した
タグのみ保持1つ
11
12 $str=ストリップスラッシュ($str);
13 エコー ストリップタグ($str)."
rn--------------------------------- --------------------
rn";
14 echo htmlspecialchars($str)."
rn--------------------------------- --------------------
rn";
15 echo htmlentities($str)."
rn--------------------------------- --------------------
rn";
16 echo mysql_escape_string($str)."
rn--------------------------------- --------------------
rn";
文字列には、バックスラッシュ パス、一重引用符および二重引用符、HTML タグ、リンク、ブロックされていない HTML タグ、データベース構文許容値、JS 実行判定、PHP 実行判定、連続する複数のキャリッジ リターン、改行、スペースが含まれます。これらの概念の一部は包括的であり、以下でも同様です。
ソースコードの出力は次のとおりです (JS スクリプトが実行されます):
2. フォーム送信データの処理
1. バックスラッシュを強制的に追加する
一部のホストではマジック クオート get_magic_quotes_gpc がデフォルトで有効になっており、一部のホストでは無効になっている場合があるため、単一引用符、二重引用符、およびバックスラッシュが含まれる文字を均一に処理できるように、プログラムにバックスラッシュを強制的に追加することが最善です。
1 関数 fnAddSlashes($data)
2{
3 If(!get_magic_quotes_gpc()) //POST/GET/cookie
からのデータにのみエスケープを追加します
4 return is_array($data)?array_map('addslashes',$data):addslashes($data);
他に5つ
6 $data を返します;
7}
関数 fnAddSlashes($data) を使用すると、結果は次のようになります (JS スクリプトは実行されませんが、HTML、JS、および PHP タグはフォールト トレラントである必要があります)。
2. 特殊文字の処理
以下に一般的に使用される文字列処理をいくつか示します。これらは特定の状況に応じて選択できます。送信されたフォームデータは上記でエスケープされているため、内容を置換またはフィルターする必要がある場合は、関連する文字に対するアッドスラッシュの影響を考慮する必要があり、置換または検索時にバックスラッシュの追加を考慮する必要があります。 rn 置換など、他の文字置換は効果がありません。
A. 連続する複数のスペースのうち 1 つだけを保持してください
$data = preg_replace("/s(?=s)/","\1",$data );//複数の連続するスペースのうち 1 つだけを保持します
B. 復帰と改行を
に置き換えます
$data = str_replace("r","
",$data );
$data = str_replace("n","
",$data );
// html のデフォルトの
はブロックされませんが、xhtml では
を使用することをお勧めします: http://stackoverflow.com/questions /1946426/ html-5-is-it-br-br-or-br
C. 複数の連続した
は 1 つだけ保持します
$data = preg_replace("/((
)+)/i", "
", $data );//複数の連続した
タグのみが保持されます。
D. すべての HTML タグをフィルタリングします
この方法では、HTML、リンク、ブロックされていない HTML タグ、JS、PHP などの潜在的に危険なタグをすべてフィルターで除外します。
関数strip_tags($data)を使用します
この機能を使用すると、すべての HTML タグ (リンクを含む)、PHP タグ、JS コードなどがフィルタリングされ、リンクの元のテキストが保持され、コンテンツの タグと href 部分のみが削除されます。 . 以下に示すように、PHP タグと JS タグは、中間のコンテンツを含めて全体として削除されます。
この方法では、投稿されたすべてのオリジナルコンテンツを通常のテキストとして処理します。
関数 htmlspecialchars($data) を使用します。関数が実行されると、以下に示すように、送信されたすべてのデータが通常のテキストとして表示されます。
htmlentities関数を使用した実行結果(中国語で文字化けが表示されます):
3. データベースに書き込みます
01 関数 fnEscapeStr($data)
02
03{
04
05 if (get_magic_quotes_gpc())
06
07 $data= ストリップスラッシュ($value);
08}
09 $data="'".mysql_escape_string($value) ."'";
10 $data を返します;
11}
12
13 $data=fnEscapeStr($data);
実行後、次の画像が表示されます:
4.投稿後即時表示
関数stripslashes($data)を使用します
この関数は、addslashes($data) によって処理されたデータのみに適用されることに注意してください。使用しないと、バックスラッシュが失われます (Tianyuan でエラーが発生しました)。数日前、データベースを読み取るときにこの関数が使用されたため (コードが古く、変更するのを忘れていました)、データベースに再度書き込むときにパス内の多くのバックスラッシュが失われ、そうしないと記事がありません。 。
2. 関数 htmlspecialchars($data) を使用します。この関数を実行すると、リンクなどに特別な処理が許可されていない限り、送信されたすべてのデータがテキストとして表示されます。特にブロックされていない HTML タグの出力には htmlspecialchars を使用できます。フィルタリングやタグ変換を行わないと、出力でレイアウトが混乱する可能性があります。
htmlentities の使用は推奨されません。一方で、出力されるソース コードが非常に読みにくくなります。また、htmlentities 関数を使用すると、中国語などの 2 バイト文字が大量に文字化けして表示されます。 。他の文字は通常通り表示されます。
2 番目の出力方法は、不正なタグや潜在的な実行リスクがないことが確認できれば、状況に応じて直接出力することもできます。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター
