2

私はここでかなり新しいです。ユーザーが自分のジャーナルを投稿できるブログ/ジャーナル サイトを作ろうとしています。悪意のあるコードの挿入が本当に怖いので、私はまだそれを作ることにかなり消極的です.

サンプルコードは次のとおりです。

 <?php
 $test = "<b>blah</b>"; //User input from SQL
 echo "$test";
 ?>

出てくるのは太字の「何とか」という言葉だけですか?私が達成しようとしていたのは、<b>blah</b>代わりに " " をエコーすることでした。私のウェブページ全体を実際に台無しにする可能性のあるPHPコードを人々に入れてほしくありません。変数$testは実際には MYSQL クエリであるため、その変数は例として必要になることに注意してください。できることはわかっていますが、代わりにecho '$test';出てくるだけです。"$test"髪を引っ張りたいのですが、まだわかりません。

私が知っている2番目の解決策はhtmlspecialchars();関数ですが、文字列を変換されたものではなく、入力したものとして表示したい...

それを行う方法はありますか?

4

4 に答える 4

2

OPはHTML自体をページに出力し、タグを削除しないことを望んでいると思います。これを実現するには、最初に文字列を実行しますhtmlentities()

$test = '<b>blah</b>';
echo htmlentities($test);

これは出力されます:

&lt;b&gt;blah&lt;/b&gt;

ページで次のようにレンダリングされます

<b>blah</b>
于 2012-12-28T15:28:43.710 に答える
2

Echo は文字列から PHP コードを実行しません。これは不可能であり、コードのセキュリティ ホールではありません。

于 2012-12-28T15:40:32.103 に答える
1

たとえば、 Twigなどのテンプレート エンジンを使用できます。

于 2012-12-28T15:41:14.933 に答える
0

htmlspecialchars();が探しているものでない場合は、header()オプションを試してください。

header('Content-type: text/plain');

<b>Hi</b>ブラウザに渡そうとすると、太字で表示され、テキストは返されません。しかし、この方法を試すことができます<textarea></textarea>


または他の方法は使用することhtmlentities()です:

<?php
$test = "<b>blah</b>"; //User input from SQL
echo htmlentities("$test");
?>
于 2012-12-28T15:35:02.730 に答える