【问题标题】:PHP breaking URL by encoding ampersandPHP通过编码&符号打破URL
【发布时间】:2014-02-22 01:03:15
【问题描述】:

我正在调试一个要在图像中显示此代码的网站:

<a href="<?=$auction_link;?>"><img src="<? echo ((!empty($main_image)) ? 'thumbnail.php?pic=' . $main_image . '&w=' . $layout['hpfeat_width'] . '&sq=Y' : 'themes/' . $setts['default_theme'] . '/img/system/noimg.gif');?>" border="0" alt="<?=$item_details[$counter]['name'];?>"></a>

没有显示图片,显然是因为href值被转换为:

thumbnail.php?pic=uplimg/img_A_100430_b93204949c62ffba35eb62f1b94b93c4.jpg&amp;w=0&amp;sq=Y"

什么时候应该:

thumbnail.php?pic=uplimg/img_A_100430_b93204949c62ffba35eb62f1b94b93c4.jpg&w=250&sq=Y

注意&amp;amp;,& 应该在两个地方。有没有办法停止编码?

谢谢 - 乔

【问题讨论】:

  • PHP 不会做你不要求它做的事情。您在某处转义 URL 值,可能是 htmlspecialchars()
  • 虽然它是编码的,但它应该可以工作,因为它必须被编码。在 HTML 中 & 只能用于实体引用(它通常适用于两种变体,但没有编码它是无效的 HTML)。问题一定是别的。

标签: php url encode


【解决方案1】:

尝试在您的 PHP 源代码中使用 &amp;amp;。顺便说一句,PHP 不会对 & 符号进行编码。

/*...*/ $main_image . '&amp;w=' . $layout['hpfeat_width'] . '&amp;sq=Y' /*...*/

【讨论】:

  • 是的,这是一个远景,因为实际上任何一个都应该工作。这只是证明其他事情是错误的。您使用的是什么浏览器和版本?你有什么样的元标签?等等等等,你需要在你的问题中提供尽可能多的信息。
【解决方案2】:

您正在为 HTML 而不是 URLS 进行编码。

如果您希望 & 号是数据而不是控制 - 也就是说,如果您希望 & 号作为参数名称或值的一部分而不是作为分隔符 betweek 键值对传递给服务器,您想使用%xx 编码,其中 xx 是要编码的字符的十六进制值。

如果您根本不想对其进行编码,则需要找到进行编码的代码并将其删除(不会发生任何事情)。

【讨论】:

  • 网址是html,为什么不应该是html编码。
  • 因为上下文不同。 URL 的解析方式不同,并且定义在与 HTML 不同的标准中。
  • 我确实希望它是一个分隔符,这是我通常会这样做的方式。但你是对的 - 似乎确实有其他一些函数在进行编码。我试图找到一种方法来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 2011-12-14
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 2011-05-22
相关资源
最近更新 更多