【问题标题】:URL having parentheses not working in codeigniter with datamapper ORM带有括号的 URL 在带有 datamapper ORM 的 codeigniter 中不起作用
【发布时间】:2013-01-22 19:06:03
【问题描述】:

我正在将 codeigniter 与 datamapper ORM 一起使用,今天我注意到一个奇怪的错误。

我有一个名为 categories 的函数,它从项目页面链接。到类别的 url 使用类别的名称形成,并使用 rawurlencode 进行编码。

在类别方法中,我解码此 url 字符串并使用 get_by_name 找到类别。这很好用,除非类别名称包含 括号

假设我有一个属于“字母(英语)”类别的项目“ABCDEFGHI”。现在,运行 rawurlencode 后的类别给出字符串“Alphabets%20%28English%29”,当我运行 rawurkdecode 时,它​​再次按预期变为“Alphabets (English)”。

<?php
$a = "Alphabets (English)";
$b = rawurlencode("Alphabets (English)");
$c = rawurldecode($b);
echo ($a == $c); //returns 1
?>

所以我知道 $a 和 $c 是相等的。我什至通过替换确切的字符串值说“字母(英语)”来测试下面给出的方法,它可以工作,但使用 rawurldecode 不能。

但是下面的方法仍然返回 nil 一个 404 页面。

function categories($url = '',$page = 1){
    $url = rawurldecode($url);
  //echo $url;
  //I tried echo here and it gives "Alphabets (English)"
    $cat = new Category();
    $cat->get_by_name($url);
  // replacing $url with the string output from echo $url 
  //in above call works. what is happening here?
  // $cat->get_by_name("Alphabets (English)"); works but 
  // $cat->get-by_name($url); doesn't
    if(empty($cat->id)){
        show_404();
    }
    else{
      // work to do//
    }
}

我知道我不应该使用这种方法,我应该为类别名称命名并在表格中添加一个额外的字段。但我现在不想破坏链接。

我希望你能理解我的问题。请给我一些线索。帮我弄清楚问题。

谢谢!

已编辑

我看了rawurlencode的手册,有人在这个页面上说http://php.net/manual/pt_BR/function.rawurlencode.php

另请注意,某些字符当前是“保留的”,但应该被视为“不安全”:这包括括号“()”,当在 MIME 标头中使用 URL 时,这显然是不安全的。

因此,如果有效 URL 包含“()”字符,则应使用上层编码将 URL 包含在上层协议中定义的一对“不安全”字符(例如MIME 标头中的“”对,因为这些字符不能是有效 URL 的一部分)...

我相信 codeigniter 或 datamapper 或两者都不允许使用这些括号字符。如果您找到了一些解决方案,请提供帮助。 我尝试在 codeigniter 配置中为允许的 uri 字符添加括号,但仍然没有运气。

【问题讨论】:

    标签: url codeigniter-2 codeigniter-datamapper


    【解决方案1】:
    if(empty($genre->id))
    

    什么是$genre,你是不是忘记设置$cat->get_by_name($url)的返回为$genre了?

    【讨论】:

    • 是$cat,我改了上面的代码来概括一下。我正在互联网上搜索和阅读有关 datamapper 和 codeigniter 的信息。仍然没有解决办法。感谢您的快速响应。
    • 尝试使用 rtrim 去除 $url 变量末尾的空格(或其他字符) $url = rtrim($url);
    • 试过 rtrim、stripslashes、trim 等,还是不行。现在我用方括号 [ ] 替换了括号。现在类别看起来像“Alphabets [English]” 我已经编辑了上面的问题并解释了这个问题的可能原因。方括号是括号的合理替代品,并且可以正常工作。我将删除这些 url 或将它们重定向到新版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2023-03-05
    • 2015-11-03
    相关资源
    最近更新 更多