我已经检查了很多其他答案,但都没有用。
我被雇来为一份其他开发人员放弃的工作修复bug。该应用程序具有添加注释和删除注释功能。
问题出现在删除评论部分。他设计了数据库,这样所有评论都可以简单地输入到一个由管道字符分隔的单元格中。因此,在删除注释时,需要将整个注释作为参数放置在url中,然后将其传递给模型并从数据库中删除。
我知道这很糟糕,但我无法重新编码整个功能。
现在,当用户输入诸如"What's Up?"之类的注释时,删除注释url会抛出"Codeigniter:您提交的URI包含不允许的字符。"错误
我尝试将引号转换为HTML字符实体,但它们再次包含不允许使用的字符。
有人能为这个问题提出一个可能的解决方案吗?重新设计数据库不是一个可行的选择,因为我将不得不更改用于处理不同分隔符的大量php代码。篡改不允许使用的字符列表似乎也是个坏主意。
谢谢。
打开配置文件,找到以下参数:
$config['permitted_uri_chars']='a-z 0-9 ~%。:_()@&-!=?';
您可以根据自己的要求进行更改或者你可以把它留空
阅读配置文件中的注释部分。
上面写着:Leave blank to allow all characters -- but only if you are insane.
我不确定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">
此外,如果数据库将转义符视为特殊字符,请检查是否需要向其中任何一个添加转义符。
例如,如果%被视为特殊字符,那么您可能需要在它之前添加一个。