如何在PHP+HTML+SQL中使用带空格的GET在表单中传递变量

hi3rlvi2  于 2023-04-28  发布在  PHP
关注(0)|答案(7)|浏览(99)

我有一个表单,其中我显示了一个选择项和另外两个不可见的输入,其中有一些变量值,我需要在按下“Action”按钮时传递到同一页面。但是我遇到的问题是这些变量都是城市名,比如“纽约”,所以名字里面有一个空格,在传递变量的时候,只有“New”被传递;空间也随之消失。我读到这些变量中不应该有任何空格,那么我应该怎么做呢?
下面是我的示例代码:

// 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 ?>>,使它可以通过空间?

b4lqfgs4

b4lqfgs41#

根据我上面的评论:
问题是选项值周围没有引号。更改如下:

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

你就可以走了

7tofc5zh

7tofc5zh2#

使用urlencode()。它会将空格转换为%20,并成功传输。.你可以用urldecode()解码。

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

ffscu2ro3#

我认为这与URL编码有关。URL中不能有空格。但是,有一些特殊字符可用于表示URL中的空格。GET方法使用URL。
我相信这可能会有所帮助;http://php.net/manual/en/function.urlencode.php

cld4siwp

cld4siwp4#

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

sxpgvts35#

对要传入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。

hof1towb

hof1towb6#

关于功夫的回应。urlencode()不会将白色转换为%20,而是转换为+字符。使用rawurlencode()将白色转换为%20。
你可能也想读一下这个:https://stackoverflow.com/a/2678602/4481831

iyfamqjs

iyfamqjs7#

根据HTML标准,你应该在值周围使用“(双引号),并编码特殊字符(" < > &),php有标准的功能:

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

注意-既不使用mysql_真实的_escape_string也不使用urlencode,因为它们转义不同的符号,也不使用htmlspecialchars,在此上下文中使用它们是无效的。

相关问题