【发布时间】:2011-09-07 17:31:55
【问题描述】:
我有一个网站,允许用户创建一个“唯一 URL”,以便他们可以以 www.site.com/customurl 的形式传递给同事。
当然,我会进行检查以确保输入确实是唯一的,但我还想过滤掉大公司名称(受版权保护的名称等)和诅咒词之类的东西。为此,我的想法是构建一个 txt 文件,其中包含想到的每个可能的名称/单词的列表。我们所拥有的测试 txt 文件的文件大小不是问题,但我很好奇这是否是解决此问题的最佳方法。我认为数据库调用不如读取文本文件高效。
我的代码是:
$filename = 'badurls.txt';
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . '/' .$filename, 'r');
if ($fp) {
$array = explode("\n", fread($fp, filesize($_SERVER['DOCUMENT_ROOT'] . '/' .$filename)));
}
if(in_array($url, $array)) {
echo 'You used a bad word!';
} else {
echo 'URL would be good';
}
注意
我说的可能是前 100-200 家公司的名单,也许还有 100 个脏话。我可能是错的,但不要期望这个列表永远超过 500 字,更不用说 1000 字了。
【问题讨论】:
-
我实际上会说使用 DB 效率更高——尤其是在文件越来越大的情况下。
-
我相信你应该在你的数据库中使用一个表,它会更快地搜索,并且可以更容易地在你的脚本后端添加新的禁止名称。即使只有 500 个,也可以创建日志来计算或记录哪些用户正在使用哪些 url,1 个表可以用于多种用途......不要懒惰寻找快速解决方案,还有使用不同字符集和大写字母的单词呢
-
我删除了最后一段,因为它离题且令人反感。
-
@NikiC - 我衷心感谢某些 SO 用户的帮助,如果冒犯所有人,但它是垃圾 (IMO),当用户继续投票时,我表示歉意,投反对票(可能是因为他们给出的答案被投反对票),甚至不提为什么。协作网站的重点是分享信息和建设性意见。如果有人不同意我的问题内容,我对此没有异议,但请花时间说明原因,而不是简单地单击鼠标并离开页面。