【问题标题】:How to pass carriage return via passedArgs in CakePHP如何在 CakePHP 中通过 passArgs 传递回车
【发布时间】:2014-03-12 17:44:47
【问题描述】:

我在尝试将参数传递给 CakePHP 中控制器的另一个函数时遇到问题。

首先,我在控制器函数 ($this->request->data[...]) 中从视图中的表单的文本区域收集一个字段。一旦我有了这个参数(字符串),我想将它传递给同一个控制器中的另一个函数。没问题,我使用重定向并将参数作为$this->redirect(array('action' => 'function2', 'param1'=>$data1, 'param2'=>$data2... 传递并在function2$this->passedArgs 中获取它。

当字符串参数(从 textarea 收集)内部有换行符(回车)时,问题就出现了。似乎 CakePHP 不接受像 myproject/function2/param1:hi**%0D%0A**bye/param2:... 这样的 URL 路由——我的意思是其中包含特殊的十六进制字符,比如 %0D%0A(换行符)。

所以,问题是:当这些参数包含回车等特殊的十六进制字符时,有什么方法可以传递这些参数?

我认为也可以像通过?param1=data1 获取参数一样传递它——我已经对其进行了测试并且它可以工作,但我认为将参数传递给函数而不是通过GET 传递更优雅。

【问题讨论】:

  • 不要在 2.x 中使用命名参数,使用查询字符串。请参阅here 为什么。
  • @mark 哇!那个博客里的解释太酷了!正是我想要的,知道为什么不能传递带有特殊字符的命名参数(“命名参数的编码可以破坏 url。”)以及改用什么。似乎我不是唯一一个有问题的人:D。它还说命名参数将在下一个版本的 CakePHP 中过时,因此我将不得不更改此参数出现在查询字符串的位置。这些只是 GET 参数,只是 Cake 以“标准化”的方式管理它们,不是吗?让他们成为$this->request->query 等等。非常感谢,你帮了我很多。(写它作为投票的答案)。

标签: php cakephp parameter-passing


【解决方案1】:

正如上面评论中提到的,建议不要在 CakePHP2.x 中使用命名参数。它们是错误的实现。 改用查询字符串,这将解决编码方面的所有问题。

此外,查询字符串是 CakePHP 未来版本的一种方式,因此如果不再使用已弃用的功能,则可以避免升级过程中的额外痛苦。

详情见this article

【讨论】:

  • 正如我所说,非常感谢!这对我帮助很大,我已经解决了我的问题。
【解决方案2】:

\n 换行 -- \r 用于回车 ---

这应该可以解决您的问题,但请注意,这些需要用双引号括起来才能正常工作。

【讨论】:

  • 感谢您的回答,但我认为迁移到“查询字符串”而不是命名参数会更好,正如@mark 所说。无论如何,谢谢伙计!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 2012-07-16
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多