私は一生、これを理解することはできません...
フォームがあり、いくつかのフィールドをクエリ文字列として渡すことになります。
$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;");
$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 つがそれを取り除くべきではありませんか?!?