1

在网页中,用户可以将字符串输入到输入元素中。提交表单后,所有输入都会根据规则进行验证。验证后,输入页面再次显示给用户,带有标记的错误和已经填写的输入元素。

验证页面中用于发回数据的部分代码:

$query_string = '?filename='.$timed_file_name . '&name=' . $name . '&text='.$text; 
header('Location: http://' . $server_dir . $next_page . $query_string);

很明显,不能在标头中使用 & 符号,因为如果我键入 jack&jones,它会弄乱标头,而 php 将只返回 jack。

我可以用一种丑陋的方式做到这一点:

验证页面:

$name = html_entity_decode($name); 
$name = str_replace("&","aammppeerrssaanndd",$name);

输入页面:

$name = $_GET['name'];
if (strpos($name,'aappoossttrroopphh') !== false) {
    $name = html_entity_decode($name); 
    $name = str_replace("aappoossttrroopphh","&",$name);
}

有一个简单的解决方案吗?

4

3 回答 3

2

您可以使用urlencodeurldecode

在你的情况下,它会像这样使用:

$query_string = '?filename='. urlencode($timed_file_name) . '&name=' . urlencode($name) . '&text='. urlencode($text);
于 2013-02-05T19:43:54.110 回答
2

创建 URL 时,通过以下方式运行变量:

$var = urlencode( $var );

当向用户展示结果时,换一种方式:

$var = urldecode( $var );
于 2013-02-05T19:44:49.517 回答
1

我认为您可能想使用http-build-query这会从数组中为您生成查询字符串。

文档说:

从提供的关联(或索引)数组生成 URL 编码的查询字符串。

例子

$a = array("be"=>"a","wonderful"=>"happier & great","but"=>"strange like @%");
echo http_build_query($a);
//gives "be=a&wonderful= happier +%26+great&but=strange+like+%40%25"

因此,在您的情况下,您将使用:

$args = array('filename'=>$timed_file_name, 'name'=>$name, 'text'=>$text);
$query_string = "?".http_build_query($args);
于 2013-02-05T19:50:22.483 回答