在网页中,用户可以将字符串输入到输入元素中。提交表单后,将根据规则验证所有输入。验证后,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);
}
有一个简单的解决方案吗?
答案 0 :(得分:2)
在你的情况下,它会像这样使用:
$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);