我正在使用codeigniter (codeigniter新手)。
我在控制器中有一个函数getproducts($p1, $p2, $p3)
。
当我调用getproducts/0/0/
从我的jquery-script (ajax)它的工作,,但我想调用URL这样:
getproducts/0/0/{"0":"13","1":"24"}
它不起作用。(我进入谷歌搜索结果,而不是停留在我的本地web服务器)
我基本上想传递一个数组在url中的函数以某种方式使用编码器时。怎么解呢?请帮忙:-)
我认为你至少应该调整Codeigniter关于URL中允许字符的配置,包括花括号,逗号和双引号:
$config['permitted_uri_chars'] = ',{}"a-z 0-9~%.:_()@'-';
你最终出现在Google上的原因可能是别的(似乎与Codeigniter无关)
你的浏览器不认为这是一个URL,并导航到谷歌(认为你正在搜索的东西),我认为。
url的主要部分
第5节给出了URL语法的完整BNF描述。
通常,url是这样写的:
<scheme>:<scheme-specific-part>
URL后面包含正在使用的方案的名称()由冒号和字符串(the)组成解释取决于方案。
方案名称由一个字符序列组成。小写字母字母"a"—"z",数字,字符"+",句号("。")和连字符("-")是允许的。对于弹性,是计划在解释url时,应该将大写字母等同于方案名称中的小写(例如,允许"HTTP"answers"HTTP")。
因此,只有字母数字、特殊字符"$-_.+!*'(),"和保留字符可以用于保留目的
schemepart = *xchar | ip-schemepart
请参阅http://www.faqs.org/rfcs/rfc1738.html
{"0":"13","1":"24"}应该url编码。
http://php.net/manual/en/function.urlencode.php我认为这个问题的更好的答案是使用内置的uri到关联数组处理程序。参见http://www.codeigniter.com/user_guide/libraries/uri.html?highlight=uri这就停止了对配置允许的uri字符的所有讨厌的胡闹。
你的uri将是:getproducts/p1/0/p2/0/p3/0/p5/13/p6/1/p6/24处理程序是这样的:
function get_product()
{
$object = $this->uri->uri_to_assoc(4);
}
您需要使用URI类的$this->uri->assoc_to_uri()
手册已写,
接受一个关联数组作为输入,并从中生成一个URI字符串。数组键将包含在字符串中。例子:
$array = array('product' => 'shoes', 'size' => 'large', 'color' => 'red');
$str = $this->uri->assoc_to_uri($array);
// Produces: product/shoes/size/large/color/red