【问题标题】:CodeIgniter urlencode/decodeCodeIgniter urlencode/decode
【发布时间】:2011-09-10 06:21:00
【问题描述】:

控制器

function delete_payment($payment_id)
{
    $this->sale_lib->delete_payment($payment_id);
    $this->_reload();
}

查看

   <?php echo anchor("sales/delete_payment/$payment_id",'['.$this->lang->line('common_delete').']');?>

$payment_id 可能类似于“Gift Card:1”或“Gift Card:12345983984334”

当它是 Gift Card:1 时,url 会自动解码并且删除功能起作用,当它是较长的字符串时,例如 Gift Card:12345983984334",url 不会被解码。

网址是:

http://localhost/index.php/sales/delete_payment/Gift%20Card:1

http://localhost/index.php/sales/delete_payment/Gift%20Card:12345983984334

第一个有效,第二个无效

【问题讨论】:

  • delete_payment() 函数中的代码是什么?你指的编码是什么?浏览器的urlencoding?
  • $payment_id 在 url 为 localhost/index.php/sales/delete_payment/Gift%20Card:1 时最终会被解码,但否则 url 最终会包含 %20 而不是其中的空格。似乎由于某种原因,url 的处理方式有所不同。我尝试通过 CI 路由器进行跟踪,但无法完全弄清楚。
  • 这可以很容易地通过使用$_GET 来避免,或者更重要的是:首先不要使用url 和GET 进行破坏性操作,而是使用$_POST
  • +1 表示不使用 URI 来执行此类操作,在最坏的情况下这是一个安全风险,在最好的情况下是不好的做法!

标签: php codeigniter


【解决方案1】:

使用 %3A 代替: 它是编码的“:”

【讨论】:

  • 在 codeignitor 中,url 中允许使用 : 并且我无法对整个字符串进行 urlencode 我在 url 中得到不允许的字符
【解决方案2】:

实际上,我只是尝试在我的本地计算机(Windows 7 上的 WAMP)上复制您的情况,您是对的。我尝试了所有主流浏览器(FF4、IE9、Chrome),没有发现任何差异。

虽然这并不能真正回答您的问题,但您始终可以使用 php 函数 rawurldecode 来构建这样的解决方法:

function delete_payment($payment_id)
{
    $decoded_id = rawurldecode($payment_id);
    $this->sale_lib->delete_payment($decoded_id);
    $this->_reload();
}

通过这种方式,您将获得Gift Card:123456789 形式的“id”(我尝试了不同的长度并且一直有效),为您的模型做好准备。

【讨论】:

    【解决方案3】:

    ...继续我的评论...

    如果您要继续使用 URI 字符串执行删除,那么为什么不将 ID 号作为另一个 URI 段呢? -- 去掉: -- 去掉URI编码问题!

    假设您已经在使用某种 URI 重写或 URI 到应用程序的映射,那么这应该很容易在您已有的基础上实现。此外,它应该简化您检索和使用此值的方式,并可能处理任何错误!

    我的编程和应用程序设计方法是:
    - “如果你发现某事很难做,那你就做错了!”

    很抱歉,如果这没有多大帮助。

    仅供参考 - 我赞成 @ankur.singh 的回答

    编辑:在 StackOverflow 上找到 this 可能有用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 2016-06-23
      • 2010-11-03
      • 2013-04-16
      • 2021-06-14
      相关资源
      最近更新 更多