Codeigniter禁止字符解决方法

时间:2014-10-04 06:13:26

标签: php codeigniter escaping special-characters codeigniter-url

我已经检查过其他一些答案,但无济于事。

我被雇用来修复一些其他开发人员逃避的工作的bug。 该应用程序具有添加注释和删除注释功能。

问题出现在删除评论部分。他设计了数据库,以便将所有注释简单地输入到由管道字符分隔的单个单元格中。因此,在删除评论时,整个评论需要作为参数放在网址中,然后传递给模型并从数据库中删除。

我知道这很糟糕,但我无法重新编码整个功能。

现在,当用户输入诸如“What's Up?”之类的评论时,删除评论网址会抛出“Codeigniter:您提交的URI已禁止使用字符”。错误。

我尝试将引号转换为HTML字符实体,但它们又包含不允许的字符。

有人可以为这个问题建议一个可能的解决方法吗? 重新设计数据库不是一个可行的选择,因为我将不得不更改用于处理不同分隔符的广泛的PHP代码。 与不允许的角色列表混淆似乎也是一个坏主意。

谢谢。

2 个答案:

答案 0 :(得分:3)

打开配置文件并找到此参数:

  

$ config ['allowed_uri_chars'] ='a-z 0-9~%。:_()@& - !=?';

您可以根据自己的要求进行更改,也可以将其留空 阅读配置文件中的注释部分。

它说:Leave blank to allow all characters -- but only if you are insane.

答案 1 :(得分:2)

我不确定htmlentities是否会有所帮助。 您是否首先仅在参数上调用urlencode

<?php

$query_string = 'foo=' . urlencode("What's Up?");
echo '<a href="mycgi?' . htmlentities($query_string) . '">';

?>

<a href="mycgi?foo=What%27s+Up%3F">

如果数据库将它们视为特殊字符,还要检查是否需要为其中任何一个添加转义字符。

e.g。如果将%视为特殊字符,则可能需要在其前添加\