【问题标题】:Using & in URL bugs up the $_GET在 URL 中使用 & 会使 $_GET 出错
【发布时间】:2011-06-12 14:45:45
【问题描述】:

通过http://validator.w3.org/check 运行我的网站时,我收到很多错误消息说我的链接应该使用& 而不是&

所以我更新了我的代码,才发现$_GET 不喜欢这个。

我的网址是:www.mysite.com/?foo=1&bar=2
我把它改成了这样:www.mysite.com/?foo=1&bar=2

问题是执行print_r($_REQUEST) 给了我这个结果:

Array ( [foo] => 1 [amp;storeid] => 2 ) 

为什么$_GET$_POST$_REQUEST 不识别&

更新
这是我生成 URL 的方式之一:

$url = get_bloginfo('url')."/?foo=".$element['name']."&bar=".$element['id'];
$link = '<a href="'.$url.'" title="'.$element['name'].'">'.$element['name'].'</a>';

【问题讨论】:

  • 对应的HTML源代码看起来如何?
  • 你能显示那个地方生成的HTML吗?
  • “bugs up”是什么意思?

标签: php url


【解决方案1】:

&amp;amp;&amp;amp; 的 HTML 实体引用。 URL 参数仍然由单个&amp;amp; 分隔,但如果您在 HTML 中提及 URL,则需要对其进行编码。对于

<img src="img?width=100&amp;height=100" />

然后浏览器请求img?width=100&amp;height=100

【讨论】:

  • &amp;amp; 是一个实体引用。它引用了名为 amp 的实体,其值为 &amp;#38;
  • 啊,就是这样!由于我使用的是 WP,所以我只使用了esc_url,我的所有问题都得到了解决。谢谢:)
【解决方案2】:

您必须在某处进行双重编码,以便您的链接:

www.mysite.com/?foo=1&bar=2

变成:

www.mysite.com/?foo=1&amp;bar=2

然后:

www.mysite.com/?foo=1&amp;amp;bar=2

你读的是正确的。为了澄清,在您的 HTML 中,&amp;amp; 必须编码为 &amp;amp;。当然,URL 本身仍然只包含&amp;amp;; PHP 永远不会看到“&amp;amp;”,因为该编码是为了您的浏览器的利益。

【讨论】:

    【解决方案3】:
    // Fix for &amp; bug in url
    if( $_GET ) foreach( $_GET as $key => $value )
    {
        if( strpos( $key, 'amp;' ) === 0 )
        {
            $new_key = str_replace( 'amp;', '', $key );
            $_GET[ $new_key ] = $value;
            unset( $_GET[ $key ] );
        }
    }
    

    它不适用于 filter_input :(

    【讨论】:

      【解决方案4】:

      在任何情况下,手动对各种 URL 部分进行编码都不是一个好习惯。你应该这样做:

      $query_string = 'foo=' . urlencode($element['name']) . '&bar=' . urlencode($element['id']);
      echo '<a href="mycgi?' . htmlspecialchars($query_string) . '">';
      

      我认为这会解决不必要的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-27
        • 2012-11-08
        • 2017-09-10
        • 1970-01-01
        • 1970-01-01
        • 2013-07-17
        • 2011-05-25
        相关资源
        最近更新 更多