Codeigniter正在“捕捉”网址字符,即使它们已被urlencoded编码

时间:2010-10-18 03:04:51

标签: codeigniter urlencode

我遇到了codeigniter最奇怪的问题。我有一个具有搜索功能的网站,该网站在网址中显示此人的查询,以便他们可以保存网址。我确保查询文本在我将其粘贴到url之前已经通过rawurlencode。但是,当查询中的某个字符不在我的allowed_uri_characters配置中时,Codeigniter仍会将我发送到错误页面。

即使我的浏览器显示/ search-results / query /%22samplequery%22,我仍然会收到有关使用非允许字符的错误。

这是一个错误吗?我的网址中没有不允许使用的字符。我有一个%符号和一些数字(都是特别允许的)。绝对是allowed_uri_characters设置让我感到悲伤。如果我为它添加一个引号,它允许%22查询没问题。

要明确的是,查询来自作为发布数据的表单,然后在我的控制器中进行编码,然后重定向到新页面。在编码之前,不可能以某种方式应用allowed_uri_characters。

这让我感到沮丧,因为我目前唯一的解决办法就是将我的allowed_uri_charcters打开到阳光下的一切,这不是很安全!

3 个答案:

答案 0 :(得分:1)

似乎您需要将@添加到allowed_uri_chars,即使您在将电子邮件发送到site_url()之前对其进行了电子邮件编码。在观看角色之前可能会对其进行urldecode ... Percent Symbol in CodeIgniter URI

以下是针对您的问题的更具体的帖子。 http://sholsinger.com/archive/2009/04/passing-email-addresses-in-urls-with-codeigniter/

我尝试使用allowed_uri_chars,最后最终将电子邮件作为查询字符串(?email = bla@bla.com)传递,甚至不对其进行urlencoding。效果很好:))

答案 1 :(得分:0)

将%20的URL编码为“在codeigniter验证之前”吗?如何将其添加到允许的char列表中。

答案 2 :(得分:0)

我有自己的解决方案,这是凌乱而不是最佳,但它的工作原理。您可以创建一个存储的表(search_string,url_title)。

每次执行搜索时,保存字符串,生成url_title()并将其保存到数据库。这样,您就可以将用户重定向到安全网址,而不会错过初始搜索。

我知道有人会因为这个解决方案而对我大喊大叫。但是,如果您的网站很小,并且您的流量保持较低,那么这是一个有效的解决方案。