ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルでフォーマットされたユーザー入力を表示する

PHP_PHP チュートリアルでフォーマットされたユーザー入力を表示する

WBOY
WBOYオリジナル
2016-07-21 16:10:21781ブラウズ


このドキュメントに付属するファイルは、このページ、または「ファイルのダウンロード」の「文字処理」セクションでダウンロードできます。このドキュメントでは、書式設定されたユーザー入力を安全に表示する方法について説明します。サニタイズされていない出力の危険性について説明し、フォーマットされた出力を表示する安全な方法を紹介します。

フィルタリングされた出力の危険性はありません

ユーザー入力を取得して表示するだけの場合、送信された入力ボックスに JavaScript スクリプトを悪意を持って埋め込むことができるため、出力ページが破損する可能性があります:

これは私のコメントです
<。 script language="javascript:
alert('Do something bad here!')">

このように、ユーザーに悪意がない場合でも、テーブルが突然中断されるなど、HTML ステートメントの一部が破壊されます。 、またはページの表示が不完全です。


フォーマットされていないテキストのみを表示する

これは最も簡単な解決策であり、ユーザーが送信した情報をフォーマットされていないテキストとして表示するだけです。 htmlspecialchars() 関数を使用して、すべての文字を HTML エンコーディングに変換します。

たとえば、 に変換され、不適切なタイミングで予期しない HTML タグが出力されなくなります。
これは、ユーザーが書式設定されていないテキスト コンテンツのみを気にする場合に適したソリューションです。ただし、フォーマット機能を追加した方がよいでしょう。
カスタム マークアップ タグによる書式設定
書式設定用のユーザー独自のタグ

ユーザーが使用できる特別なタグを提供できます。たとえば、表示を強調するために [b]...[/b] の使用を許可できます。 ].. .[/i] 斜体で表示されます。単純な検索と置換操作を実行します: $output = str_replace("[b]", "", $output);
$output = str_replace("[ i] ", "
もう少し改良して、ユーザーがリンクを入力できるようにすることができます。たとえば、ユーザーは [link="url"]...[/link] を入力できます。これを ステートメントに変換します

単純な検索と置換の場合は、置換に正規表現を使用する必要があります:
$output = ereg_replace('[link="([[:graph:]]+)"]', '

ereg_replace() の実行は次のとおりです:
[link="..."] が表示される文字列を検索し、それを
[[:graph: ]] は空でない文字を意味します。正規表現については関連記事を参照してください。


outputlib.php の format_output() 関数は、これらのタグの変換を提供します。全体的な原理は次のとおりです。
htmlspecialchars() を呼び出して、HTML タグを特別なエンコーディングに変換し、表示すべきでない HTML タグを除外します。次に、一連のカスタム タグを対応する HTML タグに変換します。
以下のソースコードをご覧ください:
<?php


function format_output($output) {
/*************************************************** ************************
* 生の文字列 ($output) を取得し、同様のマークアップを取り除いた特別な
* を使用して出力用にフォーマットします。 HTML へ
*********************************************** *****************************/

$output = htmlspecialchars(stripslashes($output));

/* new段落 */
$output = str_replace('[p]', '<p>', $output);

/* 太字 */
$output = str_replace('[b]', '', $output);
$output = str_replace('[/b]', '</b>', $output);

/*斜体 */
$output = str_replace('[i]', ' ;', $output);
$output = str_replace('[/i]', '</i>', $output);

/* フォーマット済み */
$output = str_replace('[pre]', '<pre>', $output);
$output = str_replace('[/pre]', '</pre>', $output);

/* インデントされたブロック (blockquote) */
$output = str_replace ('[indent]', '

', $output);
$output = str_replace('[/indent]', '
', $output);

/* アンカー */
$ Output = ereg_replace('[anchor="([[:graph:]]+)"]', '<a name="\1"></a>',

/* リンク,リンク内で JavaScript が使用されないようにすることに注意してください */
$output = str_replace('[link="javascript', '[link=" javascript', $output);
$output = ereg_replace('[link="([[ :graph:]]+)"]', '<a href="\1">', $output);
$output = str_replace('[/link]', '</a>', $output );

return nl2br($output);
}

?>

HTML タグ文字列を生成するには、htmlspecialchars() 関数を呼び出す前ではなく、忘れずに置き換えてください。そうしないと、htmlspecialchars() を呼び出した後の労力が無駄になってしまいます。

変換後、二重引用符などの検索HTMLコードが置き換えられます

nl2br()関数は、htmlspecialchars()の後にもキャリッジリターンとラインフィード文字を
タグに変換します。

[links=""] を

outputlib.php
ブラウザでtest.phpを呼び出すと、format_output()の使用法が表示されます

通常のHTMLタグは使用できません。次の特別なタグに置き換えてください:

- これは[b]bold[です/b]
- これは [i]イタリック体[/i] です
- これは [link="http://www.phpbuilder.com"]リンク[/link] です
- これは [anchor=" test" ]アンカー、およびアンカーへの[link="#test"]リンク[/link]

[p]段落
[pre]フォーマット済み[/pre]
[indent]千鳥配置テキスト[/indent ]

これらはほんの一部のタグです。もちろん、必要に応じてタグを自由に追加できます

結論
結論

この議論では、ユーザー入力を安全に表示する方法を提供します。これは、次のプログラムで使用できます

コメントを残すボード
ユーザーからの提案
システムのお知らせ
BBSシステム

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/314278.html技術記事このドキュメントに付属するファイルは、このページ、または「ファイルのダウンロード」の「文字処理」セクションでダウンロードできます。このドキュメントでは、書式設定されたユーザー入力を安全に表示する方法について説明します。私たちは...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。