3

[アクション]ボタンを押したときに同じページに渡す必要のあるいくつかの変数値を含む、選択項目と他の2つの非表示の入力を表示するフォームがあります。しかし、これらの変数が「ニューヨーク」のような都市名であるという問題があります。そのため、名前の中にスペースがあり、変数を渡す時点では「新しい」のみが渡されます。スペースがそれに合う後は何もありません。これらの変数にスペースがあってはならないことを読みましたが、これをどのように行う必要がありますか?

これが私のサンプルコードです:

// at the beginning of the code I get this variables pass from other pages

$pais=$_GET['pais']; 
$name=$_GET['nombre'];


// this is how I query my table to populate my select item

$SN=mysql_real_escape_string($name);
$SP=mysql_real_escape_string($pais);
$estadoquery = "SELECT * FROM `".$SP."` ORDER BY Estado ASC";
$estadoresult = mysql_query($estadoquery);


// this is how I make my form

<form method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
<input type="HIDDEN"  name=nombre  value="<? echo $SN ?>">
<input type="HIDDEN"  name=pais  value="<? echo $SP ?>">
  <th scope="col" align="center" valign="baseline" size="18px">

      <select name=estado  id="estado" style="font-size:24px">
       <option value="">Todos</option>
        <?
        while($rowp = mysql_fetch_array($estadoresult)) {
               $estado = $rowp['Estado'];
               $Se=mysql_real_escape_string($estado);
          ?>
        <option value=<?php echo $Se ?>>
        <?php echo $Se ?></option>
        <? } ?>
      </select>
  </th>
   <th scope="col" align="center" valign="baseline"> 
  <input type="SUBMIT"  name="ACTION" value="IR">
</th></form>


// and this is what the button action does

 if(@$_POST['ACTION']=='IR')
{
$pais = $_POST['pais'];
$name = $_POST['nombre'];
$estado = $_POST['estado'];
  $pais = mysql_escape_string($pais);
  $name = mysql_escape_string($name);
  $estado = mysql_escape_string($estado);
// this next echos are just to check my variables.
echo $pais;
echo $name;
echo $estado; // so here I can tell that this variable is not complete

}

また、変数をスペースで渡すことはできないことを読みましたが、$pais変数「United States」がスペースを挟んで正しく渡されるのはなぜですか?<option value=<?php echo $Se ?>>誰かがこれを達成する方法や、スペースを通過できるように私を変換する方法を教えてもらえますか?

4

7 に答える 7

4

urlencode()を使用します。正常に転送されるスペースを変換します。urldecode()%20を使用してデコードできます。

<option value=<?php echo urlencode($Se); ?>>
于 2012-10-27T20:28:38.490 に答える
4

上記の私のコメントによると:

問題は、オプション値の前後に引用符がないことです。次のように変更します。

<option value="<?php echo $Se ?>"> 

そして、あなたは行ってもいいでしょう。

于 2012-10-27T20:45:10.827 に答える
3

これはURLエンコードに関係していると思います。URLにスペースを含めることはできません。ただし、URL内のスペースを表すために使用できる特殊文字があります。GETメソッドはURLを使用します。

これが役立つと思います。http://php.net/manual/en/function.urlencode.php

于 2012-10-27T20:28:25.573 に答える
1

getに渡したい変数に対して関数urlencodeを使用します。リファレンスについては、 http://php.net/manual/en/function.urlencode.phpを参照してください。

<input type="HIDDEN"  name=pais  value="<? echo urlencode($SP); ?>">

次に、変数を再度使用する場合は、urldecodeを使用して変数をデコードできます。http://php.net/manual/en/function.urldecode.php

編集後:

<option value=<?php echo $Se ?>>

する必要があります:

<option value="<?php echo urlencode($Se); ?>">

qoutesとurlencodeで。

于 2012-10-27T20:29:21.613 に答える
1
<option value="<?php echo htmlspecialchars($Se); ?>">
于 2012-10-27T20:53:00.423 に答える
1

ガンフーの反応について。urlencode()は、空白を%20ではなく+文字に変換します。rawurlencode()を使用して、空白を%20に変換します。

また、これを読むことをお勧めします:https ://stackoverflow.com/a/2678602/4481831

于 2016-05-18T21:17:49.567 に答える
0

HTML標準によれば、値の前後に「(二重引用符)」を使用する必要がありますが、値を適切にエンコードする必要があるため、コードは次のようになります。

<option value="<?php echo htmlspecialchars($rowp['Estado']); ?>">

注-mysql_real_escape_stringは使用されません。これは、異なるシンボルをエスケープするためであり、htmlspecialcharsもエスケープしないためです。

于 2013-10-09T19:40:39.350 に答える