【问题标题】:How to pass a variable in form using GET with spaces in PHP+HTML+SQL如何在 PHP+HTML+SQL 中使用带有空格的 GET 以表单形式传递变量
【发布时间】:2012-10-17 17:16:10
【问题描述】:

我有一个表单,其中显示了一个选择项和另外两个不可见的输入,其中包含一些变量值,我需要在按下“操作”按钮时将它们传递到同一页面。但是我遇到的问题是这些变量是像“New York”这样的城市名称,所以名称中有一个空格,并且在传递变量时只有“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”可以正确传递中间的空格? 有人可以告诉我如何实现这一目标或如何转换我的 &lt;option value=&lt;?php echo $Se ?&gt;&gt; 以便它可以通过空间吗?

【问题讨论】:

  • 变量的可以有空格,名字不能。例如,$pais 可以包含“New York”,但变量不能称为$pais name。有意义吗?
  • 问题是您没有在选项值周围加上引号。像这样更改它:&lt;option value="&lt;?php echo $Se ?&gt;"&gt;,你会很高兴的。
  • @cale_b 这是解决方案,谢谢!

标签: php html sql variables


【解决方案1】:

根据我上面的评论:

问题是选项值周围没有引号。改成这样:

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

你会很高兴的。

【讨论】:

    【解决方案2】:

    使用urlencode()。它会将空格转换为%20,这将被成功传输..您可以使用urldecode()对其进行解码。

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

    【讨论】:

    • 这似乎很有帮助,但现在我的变量看起来像“New+York”我该如何解决这个问题?
    【解决方案3】:

    我相信这与 URL 编码有关。 URL 中不能有空格。但是,有一些特殊字符可用于表示 url 中的空格。 GET 方法使用 URL。

    我相信这可能会有所帮助; http://php.net/manual/en/function.urlencode.php

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:
        <option value="<?php echo htmlspecialchars($Se); ?>">
        

        【讨论】:

          【解决方案6】:

          关于 Gung Foo 的回应。 urlencode() 不会将空格转换为 %20 而是转换为 + 字符。 使用 rawurlencode() 将空格转换为 %20。

          您可能还想阅读以下内容:https://stackoverflow.com/a/2678602/4481831

          【讨论】:

            【解决方案7】:

            根据 HTML 标准,您应该在值周围使用 "(双引号),而且 - 您必须正确编码它们,因此您的代码必须如下所示:

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

            注意 - mysql_real_escape_string 没有被使用,因为它转义了不同的符号,也没有 htmlspecialchars

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-05-12
              • 2020-01-11
              • 1970-01-01
              • 1970-01-01
              • 2013-01-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多