Codeigniter不允许使用字符解决方法


Codeigniter disallowed characters workaround

我已经检查了很多其他答案,但都没有用。

我被雇来为一份其他开发人员放弃的工作修复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">

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

例如,如果%被视为特殊字符,那么您可能需要在它之前添加一个'