1

私は一生、これを理解することはできません...

フォームがあり、いくつかのフィールドをクエリ文字列として渡すことになります。

$f = $_GET['full'];
$t = $_GET['title'];

$illegal = array("'", "#039;");
$f = str_replace($illegal, "", $f);
$t = str_replace($illegal, "", $t);

奇妙な理由で、アポストロフィが必要なものを台無しにしていたので、出現したときにそれらを削除しました(最初の出現は ' 、その後は #039; )。

$t は使用可能な文字列を出力するようになりました。ただし、$f には改行を含めることができます。そして、それらは次のように文字列になります

<br+%2F>

私はもう試した

$f = preg_replace("/\r?\n/", "", $f);

$breaks = array("<br+%2F>", "/\r?\n/", "<br />");
$f = str_replace($breaks, "%20", $f);

しかし、それをURLに出力すると、まだ取得できます

http://www.domain.com?t=good%20string&f=bad<br+%2F>string

これにより、404 ページが見つからないというエラーが発生します。:(

編集

$f = html_entity_decode($_GET['full']);
$t = html_entity_decode($_GET['title']);

$illegal = array("&#039;", "#039;");
$f = str_replace($illegal, "", $f);
$t = str_replace($illegal, "", $t);

$f = htmlspecialchars($f);

$breaks = array("<br+%2F>%0D%0A<br+%2F>%0D%0A", "<br+%2F>%0D%0A");
$f = str_replace($breaks, "%20", $f);

if (---private-stuff---) {
header( 'Location: /?title=' . $t . '&full=' . $f . '&fifth=fith%20percent');
}

最後の $f STILL には含まれています

<br+%2F>%0D%0A<br+%2F>%0D%0A

URLで。これらの関数の 1 つがそれを取り除くべきではありませんか?!?

4

2 に答える 2

4

HTMLエンティティのデコードを使用する

$string = html_entity_decode("&#039;");
echo $string ; // '

だからあなたの場合、それは

$f = html_entity_decode($_GET['full']);
$t = html_entity_decode($_GET['title']);
于 2012-07-19T00:34:14.693 に答える
0

404 を取得しているため、別のページ (存在しないページ) にルーティングしようとする .htaccess ルール (ModRewrite) がある可能性があります。2つの別々の問題があるように聞こえます...

クエリ文字列から実際のテキストを取得するには、Ibu が正しいです... html_entity_decode() を使用します

于 2012-07-19T00:44:17.820 に答える