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);

但是当我在一个网址中输出它时,我仍然得到

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

在网址中。这些功能中的一个不应该将其剥离吗?!?

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)试图将您路由到其他页面(不存在)。听起来你可能有两个不同的问题......

要从查询字符串中获取实际文本,Ibu 是正确的...使用 html_entity_decode()

于 2012-07-19T00:44:17.820 回答