【问题标题】:PHP urlencode in a loop?循环中的PHP urlencode?
【发布时间】:2014-10-16 05:23:29
【问题描述】:

我是 php 编程新手,所以请耐心等待。我有一些代码可以从 0 到 9 进行 while 循环,它提供了一个页面链接,并向 url 添加了一些代码,作为第 2 页上 url 的获取数据。

<?php $link_name = "Page 2"; ?>
<?php $company = "Super & Sprunklers"; ?>
<?php $id = 0; 

    while ($id <=10) {
        if ($id < 10) {
        echo "<a href=\"page2.php?id={$id}&company={$company}\">{$link_name}?id={$id}&company={$company}</a>";
    echo "<br />";

        } else {
    echo "<a href=\"page2.php\">{$link_name}</a>";
        }
    $id++;
    }
?>

这确实有效并为页面生成以下链接:

Page 2?id=0&company=Super & Sprunklers
Page 2?id=1&company=Super & Sprunklers
Page 2?id=2&company=Super & Sprunklers
Page 2?id=3&company=Super & Sprunklers etc... to id=9
Page 2

但是,当我查看第 2 页并看到我分配给 $id 和 $company 的两个变量的 get 数组时,因为“&”我需要进行 urlencode。这是我的第 2 页代码,当页面加载时没有变量时我收到警告,所以我在第 2 页给了它们空值。

<pre>
<?php 

//print_r ($_GET);
//print_r ($GLOBALS);
$id = "";
$company = "";
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (isset($_GET['company'])) {$company = $_GET['company']; }
echo $id." ".$company;
?>
</pre>

但是页面返回 0 Super

“&”之后的所有内容都丢失了。

我的问题是如果 {$company} 已经在 echo 语句中,我该如何添加 urlencode 函数。我已经编写了这段代码以使其工作:

$companyencoded = urlencode($company); 

并补充

echo "<a href=\"page2.php?id={$id}&company={$company}

echo "<a href=\"page2.php?id={$id}&company={$companyencoded}

但这涉及到创建一个新变量,当我查看第 2 页上的 $_GET 数组时,变量 $companyencoded 不存在?

你能解释一下我做错了什么吗?

非常感谢阿萨

【问题讨论】:

  • {urlencode($company)}
  • echo "&lt;a href...&amp;company=".urlencode($company)."\"&gt;...&lt;/a&gt;"; 怎么样?
  • 您不要在第二页中更改$companyencodedcompany 作为获取请求的参数传递,可以使用 $_GET['company'] 访问,就像您在第二页中编写的代码一样。
  • 感谢大家的帮助。 Linial 我已经尝试过这种方法,并且第 2 页上的数组拆分使喷水器没有价值。
  • Birdspider 我也试过你的方法,但是这给了我在第 2 页上的 get 数组的类似结果,所以谢谢,但没有雪茄。

标签: php html urlencode


【解决方案1】:

您已在第一位编码,需要在第二位解码

<?php $link_name = "Page 2"; ?>
<?php $company = "Super & Sprunklers";
$url= urlencode("Super & Sprunklers");?>
<?php $id = 0; 

    while ($id <=10) {
        if ($id < 10) {
        echo "<a href=\"page2.php?id={$id}&company={$url}\">{$link_name}?id={$id}&company={$company}</a>";
    echo "<br />";

        } else {
    echo "<a href=\"page2.php\">{$link_name}</a>";
        }
    $id++;
    }
?>

在它的网址中,我已经对字符进行了编码。 并且可以在page2.php上解码

    <pre>
<?php 
$id = "";
$company = "";
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (isset($_GET['company'])) {$company = $_GET['company']; }
echo $id." ".  urldecode($company);
?>
</pre>

祝你平安

【讨论】:

  • 谢谢 你能解释一下为什么你分配了 $url 而不是 urlencode $company 吗?例如 $company = "Super & Sprunkler"; $company = urlencode($company);
  • 那是您的选择,无论您想选择什么来完成任务。这里的主要内容始终是对特殊字符进行编码,然后不要忘记将其解码回来。好吧,你是对的,我创建了另一个不必要的变量:p。
【解决方案2】:

这是一个有效的答案

<?php $link_name = "Page 2"; ?>
<?php $company = "Super & Sprunklers"; 
  $company = urlencode($company); ?>
<?php $id = 0; 

    while ($id <=10) {
        if ($id < 10) {
        echo "<a href=\"page2.php?id={$id}&company={$company}\">{$link_name}?id={$id}&company=".urldecode($company)."</a>";
    echo "<br />";

        } else {
    echo "<a href=\"page2.php\">{$link_name}</a>";
        }
    $id++;
    }
?>

为了让第 2 页正确显示正确的数组。非常感谢大家。这行代码让我很困惑,$company = urlencode($company)。我认为这就像在电子表格中进行循环引用。

【讨论】:

    【解决方案3】:

    其实很简单。

    在将公司名称作为查询字符串传递时使用 urlencode()。并在 page2 上,确保 urldecode() 该值。

    这是您的网址:

    echo "<a href=\"page2.php?id={$id}&company=".urlencode($company)."\">{$link_name}?id={$id}&company={$company}</a>";
    

    在page2上,这样使用。

    $company = urldecode($_GET['company']);
    

    这应该可以正常工作。

    【讨论】:

    • 你好,当我尝试 &company=".urlencode($company)."它将第 2 页上的数组拆分为等于 id=>0 [company] => Super [Sprunklers]=> 。超级全局数组 $_GET 应该在回显到第 2 页时自动添加 urldecode。
    • 是的,它是..但解码与否,它应该打印没有任何问题。我在本地测试过,都正常工作
    猜你喜欢
    • 2021-05-27
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2019-03-12
    相关资源
    最近更新 更多