我已经检查过其他一些答案,但无济于事。
我被雇用来修复一些其他开发人员逃避的工作的bug。 该应用程序具有添加注释和删除注释功能。
问题出现在删除评论部分。他设计了数据库,以便将所有注释简单地输入到由管道字符分隔的单个单元格中。因此,在删除评论时,整个评论需要作为参数放在网址中,然后传递给模型并从数据库中删除。
我知道这很糟糕,但我无法重新编码整个功能。
现在,当用户输入诸如“What's Up?”之类的评论时,删除评论网址会抛出“Codeigniter:您提交的URI已禁止使用字符”。错误。
我尝试将引号转换为HTML字符实体,但它们又包含不允许的字符。
有人可以为这个问题建议一个可能的解决方法吗? 重新设计数据库不是一个可行的选择,因为我将不得不更改用于处理不同分隔符的广泛的PHP代码。 与不允许的角色列表混淆似乎也是一个坏主意。
谢谢。
答案 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。如果将%视为特殊字符,则可能需要在其前添加\
。