ホームページ バックエンド開発 PHPチュートリアル フォーム送信における PHP のフィルタリングと特殊文字の処理_PHP チュートリアル

フォーム送信における PHP のフィルタリングと特殊文字の処理_PHP チュートリアル

Jul 13, 2016 pm 05:45 PM
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
http://www.metsky.com,天缘博客
3 \'!=\'1\' OR \'1\'


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 スクリプトが実行されます):

フォーム送信における PHP のフィルタリングと特殊文字の処理_PHP チュートリアル

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 タグはフォールト トレラントである必要があります)。

フォーム送信における PHP のフィルタリングと特殊文字の処理_PHP チュートリアル

ストリップスラッシュ、改行置換、スペース置換を使用した結果は次のようになります:

フォーム送信における PHP のフィルタリングと特殊文字の処理_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 タグは、中間のコンテンツを含めて全体として削除されます。

フォーム送信における PHP のフィルタリングと特殊文字の処理_PHP チュートリアル

E. タグをフィルタリングせず、HTML に変換するだけです

この方法では、投稿されたすべてのオリジナルコンテンツを通常のテキストとして処理します。
関数 htmlspecialchars($data) を使用します。関数が実行されると、以下に示すように、送信されたすべてのデータが通常のテキストとして表示されます。

フォーム送信における PHP のフィルタリングと特殊文字の処理_PHP チュートリアル htmlentities関数を使用した実行結果(中国語で文字化けが表示されます):

フォーム送信における PHP のフィルタリングと特殊文字の処理_PHP チュートリアル 3. データベースに書き込みます

addslashes($data) を使用した後、高度な信頼できるユーザーはデータベースに直接書き込むことができますが、addslashes は 0xbf27 で置き換えられた一重引用符をインターセプトできないため、エスケープするには mysql_real_escape_string または mysql_escape_string を使用するのが最善ですが、エスケープする前にバックスラッシュを削除する必要があります。 (addslashes がデフォルトで有効になっていると仮定します)。

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);
実行後、次の画像が表示されます:

フォーム送信における PHP のフィルタリングと特殊文字の処理_PHP チュートリアル 4.投稿後即時表示

1. 上記でアッドスラッシュが使用されている場合は、データをエコーする前にバックスラッシュを削除する必要があります

関数stripslashes($data)を使用します
この関数は、addslashes($data) によって処理されたデータのみに適用されることに注意してください。使用しないと、バックスラッシュが失われます (Tianyuan でエラーが発生しました)。数日前、データベースを読み取るときにこの関数が使用されたため (コードが古く、変更するのを忘れていました)、データベースに再度書き込むときにパス内の多くのバックスラッシュが失われ、そうしないと記事がありません。 。
2. 関数 htmlspecialchars($data) を使用します。この関数を実行すると、リンクなどに特別な処理が許可されていない限り、送信されたすべてのデータがテキストとして表示されます。特にブロックされていない HTML タグの出力には htmlspecialchars を使用できます。フィルタリングやタグ変換を行わないと、出力でレイアウトが混乱する可能性があります。
htmlentities の使用は推奨されません。一方で、出力されるソース コードが非常に読みにくくなります。また、htmlentities 関数を使用すると、中国語などの 2 バイト文字が大量に文字化けして表示されます。 。他の文字は通常通り表示されます。
2 番目の出力方法は、不正なタグや潜在的な実行リスクがないことが確認できれば、状況に応じて直接出力することもできます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478662.html技術記事一昨日、Tianyuan はソース プログラムのバグにより、昨日、bankw3000 ネチズンのコメントを通じてブログ記事の内容を一括修正しました。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

See all articles