1

Web ページでは、ユーザーは入力要素に文字列を入力できます。フォームが送信されると、すべての入力がルールに対して検証されます。検証後、マークされたエラーと入力要素がすでに入力されている入力ページがユーザーに再度表示されます。

データを返送するための検証ページのコードの一部:

$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 に答える