如果你知道可能正确的URL,你可以使用以下方法:
levenshtein($给定URL, $可能URL)
。
以下是来自PHP文档的示例,已删减注释:
$input = 'carrrot';
$words = array('apple','pineapple','banana','orange',
'radish','carrot','pea','bean','potato');
$shortest = -1;
foreach ($words as $word) {
$lev = levenshtein($input, $word);
if ($lev == 0) {
$closest = $word;
$shortest = 0;
break;
}
if ($lev <= $shortest || $shortest < 0) {
$closest = $word;
$shortest = $lev;
}
}
echo $shortest == 0 ? "Exact match found: $closest\n" : "Did you mean: $closest?\n";
输出:
输入单词:carrrot
您想说的是:carrot?
当您认为人们可能省略了一个字母或多加了一个字母时,这很好,但当人们真正不知道如何拼写一个单词并想出了一些有创意的东西时,它可能会有所不足!
如果您更喜欢使用soundex()
路线,请查看metaphone()
函数。
我喜欢使用metaphone()
和levenshtein()
或similar_text()
的想法,因为它返回单词的语音表示,并且您仍然希望看到它与原始单词有多相似。
例子:
metaphone('name') = NM
metaphone('naaaaaameeeeeeee') = NM
metaphone('naiym') = NM
metaphone('naiyem') = NYM
虽然很多拼写错误都会返回相同的匹配,但最后一个示例表明您仍然希望使用类似于
levenshtein()
的东西来找到最接近的匹配。
为了提高效率,如果您使用不同的404文件进行重写以匹配此模式并失败,而不是用于站点的其余部分,则实际上不应该产生巨大开销。
如果您从同一引荐者处频繁收到相同的404(并且无法让他们更改链接),那么可能值得为该情况放置静态重写。