ホームページ >バックエンド開発 >PHPチュートリアル >PHP での書式設定されたユーザー入力の表示サポートの実装、php formatting_PHP チュートリアル
このドキュメントに添付されているファイルをこのページでダウンロードするか、ファイルのダウンロード内の文字処理でこのドキュメントを表示する方法を説明します。ユーザー入力が安全にフォーマットされました。サニタイズされていない出力の危険性について説明し、フォーマットされた出力を表示する安全な方法を紹介します。
フィルタリングされた出力の危険性はありません
ユーザー入力を取得して表示するだけの場合、送信された入力ボックスに JavaScript スクリプトを悪意を持って埋め込む可能性があるため、出力ページが破損する可能性があります:
これは私のコメントです
<。 script language="javascript:
alert('Do something bad here!')">
このように、ユーザーに悪意がない場合でも、テーブルが突然中断されるなど、HTML ステートメントの一部が破壊されます。 、またはページの表示が不完全です。
フォーマットされていないテキストのみを表示する
これは最も簡単な解決策であり、ユーザーが送信した情報をフォーマットされていないテキストとして表示するだけです。 htmlspecialchars() 関数を使用して、すべての文字を HTML エンコーディングに変換します。
たとえば、 は に変換され、不適切なタイミングで予期しない HTML タグが出力されなくなります。
これは、ユーザーが書式設定されていないテキスト コンテンツのみを気にする場合に適したソリューションです。ただし、フォーマット機能を追加した方がよいでしょう。
カスタム マークアップ タグによる書式設定
書式設定用のユーザー独自のタグ
ユーザーが使用できる特別なタグを提供できます。たとえば、...強調、...斜体の使用を許可できます。これは簡単な検索と置換です。 $output = str_replace("", "", $output);
$output = str_replace("", "", $output);ユーザーがいくつかのリンクを入力する必要があります。たとえば、ユーザーは [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('', '', $output) ;
$output = str_replace('', '</b>', $output);
/* 斜体 */
$output = str_replace('', '
/* フォーマット済み */
$output = str_replace('[pre]', '', $output = str_replace('[/pre]', '</pre>', $output); <br><br>/* インデントされたブロック (blockquote) */ <br>$output = str_replace('<br>)リーリー
<p>
', '</blockquote>', $output); <br><br>/* アンカー */ <br>$output = ereg_replace('[anchor="([[:graph:]]+)"]', '<a name="%5C1"></a><br>/* リンク、リンク内で JavaScript が使用されないように注意してください */ <br>$output = str_replace('[link="javascript', '[link= " javascript', $output); <br>$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="\1">', $output); <br>$output = str_replace('[/link]', '</a>', $output); <br><br>return nl2br($output); <br><br>注意事項: htmlspecialchars() 関数を呼び出す前ではなく、必ず呼び出し後にカスタム タグを置き換えて HTML タグ文字列を生成してください。そうしないと、htmlspecialchars() 呼び出し後の労力が無駄になってしまいます。 <br><br>変換後、二重引用符などの検索HTMLコードが置き換えられます<br><br>nl2br()関数は、htmlspecialchars()の後でも、キャリッジリターンとラインフィード文字を<br>タグに変換します。 <br><br> [links=""] を <a href="" javascript></a><br>outputlib.php <br>ブラウザでtest.phpを呼び出すと、format_output()の使用法が表示されます<br><br>通常のHTMLタグは使用できません。次の特別なタグに置き換えてください: <br><br>- これは太字です <br>- これはイタリック体 <br> - これは [link="http://www.phpbuilder.com"]リンク[/link] です <br> - これは [anchor="test"]アンカー、および [link="#test "]アンカーへのリンク[/link] <br><br>[p]段落 <br>[pre]pre-formatted[/pre] <br>
リーリー
<br>
<br><br>これらはほんの数個のタグです。もちろん、必要に応じてタグを自由に追加できます <br></p>結論 <p>結論 <br><br>この説明では、ユーザー入力を表示する安全な方法を提供します。これは、次のプログラムで使用できます。 <br><br>掲示板 <br>ユーザーからの提案 <br>システムのお知らせ <br>BBSシステム <br>
<br>詳細な説明: http://php.662p.com/thread-343-1-1.html<br><br><br></p><p>PHP は、ユーザーが写真をアップロードして表示できるようにする Web ページを作成します</p><div class="header2">
<span class="icon i-relatedanswer">。 <h3>
</h3>フロントデスク:</span><form action="php_insertpic.php" method="post" enctype="multipart/form-data" ></div> <input type="file" name="myFile" id="myFile" / ><div class="best-replyer"></form></div>バックエンド:<p class="ft p1">$pic_data = $_FILES["myFile"]["tmp_name"]; <br>$pic_size = $_FILES["myFile"]["size"];<br> $filepic = addslashes (fread(fopen($pic_data, "rb"), $pic_size ));<br>「insert into pic(id,picture) value(1,$filepic)」など、データベースに挿入するステートメントを追加するだけです。 <br>画像の表示:<br> header("Content-type:image/jpeg"); <br>データベースに接続<br> $result=mysql_query("select * from pic where id=1");<br> $myrow=mysql_fetch_array($result); <br> エコー ($myrow["picture"]);<br>
<br>
<br><br><br>PHP で数値をフォーマットするにはどうすればよいですか? <br></p><div class="header2"><span class="icon i-relatedanswer"><h3></h3>
<p class="ft p1">数字をフォーマットするための PHP の関数は、number_format です<br><br>PHP マニュアルをダウンロードするか、インターネットでオンライン マニュアルを読むことをお勧めします。 <br><br>www.itlearner.com/code/php/<br><br>その使用方法については次のとおりです: <br><br>構文: stringnumber_format(float number, int [10進数], string [dec_point], string [thousands_sep]);<br><br>Return値: String<br><br>関数の種類: 数学演算<br><br>内容説明<br><br>この関数は、浮動小数点パラメーターの数値をフォーマットするために使用されます。パラメータ 10 進数が追加されない場合、返される文字列の整数部分のみが返されます。このパラメータが追加されると、パラメータで指定された小数点以下の桁数が返されます。パラメータ dec_point は、小数点表現方法を表します。デフォルト値は「.」です。他の小数点に変換する必要がある場合は、このパラメータを変更できます。パラメータsomethingr_sepは、整数部分の3桁ごとの区切り文字です。デフォルト値は「,」です。この関数の最も特別な点は、フォーマットされる文字列であるパラメーターの数が少なくとも 1 つ必要であることです。2 つまたは 4 つのパラメーターを使用することもできますが、3 つのパラメーターは使用できません。指定した小数点以下の数値は四捨五入せずにそのまま切り捨てられるので注意してください。 <br><br>使用例<br><br><?<br />$short_pi = "3.14159";<br />$my_pi =number_format($short_pi, 2);<br />echo $my_pi."\n"; // 3.14<br />$foo = 850017.9021;<br />$ new_foo =number_format($foo, 3, ".", " ");<br />echo $new_foo."\n" // 850 017.902<br />?><br>
</p>
<p align="left"></p>
<div style="display:none;">
<span id="url" itemprop="url">http://www.bkjia.com/PHPjc/840767.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/840767.html</span><span id="genre" itemprop="genre">技術記事</span><span id="description" itemprop="description"> PHP は、書式設定されたユーザー入力の表示のサポートを実装しています。PHP 書式設定については、このページでこのドキュメントに添付されているファイルをダウンロードするか、ファイル ダウンロードの文字処理でこのドキュメントをダウンロードできます。
</span>
</div></span></div>