我这辈子都想不通...
我有一个表单,它最终将一些字段作为查询字符串传递。
$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);
但是当我在一个网址中输出它时,我仍然得到
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
在网址中。这些功能中的一个不应该将其剥离吗?!?