【问题标题】:HTML link escaping url passed as query stringHTML链接转义url作为查询字符串传递
【发布时间】:2011-11-05 15:55:58
【问题描述】:

我有以下链接:

$this->Html->link('admin',array('admin'=>true,'controller'=>'users','action'=>'login','?'=>array('continue'=>$this->here)))

应该会生成如下链接:http://domain.com/admin/login?continue=/location

但是它总是逃避 / 所以我得到一个链接,如:http://domain.com/admin/login?continue=%2Flocation

我该如何阻止这种情况?我在链接中尝试了array('escape'=>false),但这只会转义链接本身而不是href

【问题讨论】:

  • 请问您为什么使用 _GET 参数而不是命名参数?从您的域的外观来看,您的系统上可以使用 mod_rewrite。这样可以省去很多麻烦。
  • 如果我这样做会不会看起来很奇怪:http://domain.com/admin/login/continue:/location
  • 好吧,将任何特殊字符传递给 url 看起来总是很奇怪。 base64encode 或至少 url_encode 是你应该做的最少的事情,以获得一个有效的 url(蛋糕在这里为你做的)。之后您可以随时“撤消”编码。
  • 你能说明你的意思吗?我更喜欢使用 GET 参数,因为它是执行此类操作的标准方式,但我不希望它转义 /
  • 与蛋糕无关;据我所知,这是标准行为。登录和重定向时,Wordpress 也会这样做(编码斜杠)。不确定它是特定于浏览器还是特定于语言,但我不相信有解决方案。无论如何,这纯粹是美学,所以真的值得担心。如需进一步讨论,请参阅this thread

标签: php cakephp


【解决方案1】:

你要么需要在通过 cake 后手动将这部分添加到 url:

$this->Html->url(...).'?continue=/location'

我不推荐(可能是无效的网址!)

或者您在目标操作中使用 url_decode() 再次接收正确的字符串(蛋糕通常也会自动执行)。 检查 $this->request->params[named][location] 键包含的内容:

array('admin'=>true,'controller'=>'users','action'=>'login','continue'=>$this->here)

操作。在 1.3 中它仍然是 $this->params[named][location] !

【讨论】:

  • 那么我应该为我的 Html 链接写什么呢?由于我仍然没有正确遵循...
  • 正如我已经指出的 - 它应该对其进行编码。否则它是 url 的一部分。而且您显然想将其作为“内容”传递。因此它必须被编码。蛋糕风格(上述解决方案)或 base64 编码。
  • 我已经看到它没有在 url 中编码,所以它是完全合理的,并且可以将 url 作为内容传递而不是编码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多