转义标题中的特殊字符

时间:2013-02-05 19:41:03

标签: php

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

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

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

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

3 个答案:

答案 0 :(得分:2)

您可以使用urlencodeurldecode

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

$query_string = '?filename='. urlencode($timed_file_name) . '&name=' . urlencode($name) . '&text='. urlencode($text);

答案 1 :(得分:2)

创建网址时,请通过以下方式运行变量:

$var = urlencode( $var );

在向用户显示结果时,请转到另一个方向:

$var = urldecode( $var );

答案 2 :(得分:1)

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

docs说:

  

从提供的关联(或索引)数组生成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);