1

我一直在想如何让撇号的跨 URI 的。

我正在建立一个允许用户“创建相册”的网站。我有一个链接,单击该链接时,它将加载并显示某个专辑的所有内容。我正在使用 codeigniter,所以这个页面是这样调用的:

http://www.fourthdraft.com/index.php/admin/manageAlbumContents/dan's/91

admin = 控制器 managealbums = function dan's (album name) = variable

如您所知,codeigniter 不允许在 uri 中使用撇号(')。我的问题是:

  1. 如果我 htmlspecialchars/htmlentities 将专辑名称变为 &#xx; 那些新角色也不允许
  2. 如果我对它进行 url 编码,它将变为 %xx。百分比是允许的,但 codeigniter urldecode 在处理之前它只是恢复为撇号
  3. 我尝试过制作自己的 preg_replace ( ' => '~apos~' ),但我发现它效率低下,运行的行太多且乏味,因为我有一个 80% 完成的网站,而且我必须替换的字符串无处不在。
  4. 我也考虑过使用 base64_encode。它需要更多空间,但它可以完成工作。再一次,编码版本包含 '=' 这也是不允许的

我尽可能不想在 codeigniter 的配置文件中的允许字符列表中添加撇号。我相信他们没有它是有原因的。与此同时,我的选择已经不多了。想要允许撇号的原因是因为在这种情况下,它一定会被使用。例如,如果有人决定将“丹的生日派对”作为专辑名称怎么办?它一定会发生。我很确定我的用户会抱怨。即使我设法说服他们,我会用什么来代替它?dan_s 生日派对?看起来不对。此外,如果 facebook 可以做到,我也应该这样做。至少,如果 facebook 做到了,那就意味着有办法。

各位大佬有什么建议,开火吧。否则,我想知道在允许的 URI 字符中允许撇号是否可以(并且安全)。我知道这对于我经常使用的 mysql 非常危险,但我只记得 codeigniter 的查询绑定变量会自动转义字符。我想知道这是否足够并保证我的安全。

否则,请给我一个好主意。我筋疲力尽

4

1 回答 1

0

我愿意相信,时代mysql_query("SELECT * FROM table WHERE x={$_GET['val']}")已经结束。话虽如此,只要您使用参数绑定,任何体面的数据库库都可以。所以继续使用urlencode.

于 2011-06-16T03:45:18.017 回答