Nếu bạn biết những gì đúng các URL có thể có thể, bạn có thể sử dụng:
levenshtein($givenURL, $possibleURL)
Ví dụ từ tài liệu PHP, nhận xét bị xóa cho ngắn gọn:
$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";
Đầu ra:
Từ nhập: carrrot
Ý bạn là: cà rốt?
Điều này là tốt khi bạn cho rằng mọi người có thể đã bỏ qua một bức thư hoặc đặt thêm một chữ cái, nhưng nó có thể ngắn khi mọi người thực sự không biết đánh vần một từ và sáng tạo ra điều gì đó sáng tạo!
Nếu bạn thích tuyến đường soundex()
, hãy xem hàm metaphone()
.
Tôi thích ý tưởng sử dụng metaphone()
cùng levenshtein()
hoặc
similar_text()
, vì nó trả về một đại diện ngữ âm của từ, và bạn vẫn muốn xem cách tương tự nó là gốc của bạn.
Ví dụ:
metaphone('name') = NM
metaphone('naaaaaameeeeeeee') = NM
metaphone('naiym') = NM
metaphone('naiyem') = NYM
Trong khi rất nhiều lỗi chính tả sẽ trả về một trận đấu giống hệt nhau, ví dụ cuối cùng cho thấy rằng bạn thực sự vẫn muốn tìm trận đấu gần nhất với cái gì đó như levenshtein()
Đối với hiệu quả, nếu bạn sử dụng một tập tin 404 khác, nơi viết lại đã cố gắng để phù hợp với mô hình này và thất bại, hơn bạn sử dụng cho phần còn lại của trang web, nó thực sự không nên thực sự là một chi phí lớn.
Nếu bạn nhận được cùng một 404 từ cùng một liên kết giới thiệu, (và không thể yêu cầu họ thay đổi liên kết), điều đó có thể đáng giá khi chỉ viết lại tĩnh trong trường hợp đó.
Đối với các tệp tĩnh, có [mod_speling] (http://httpd.apache.org/docs/2.1/mod/mod_speling.html). –
"Tôi nhận được vài chục 404 từ các trang web khác nhau" Điều này có nghĩa là gì? Bạn có nghĩa là các trang web đã phá vỡ các liên kết đến trang web của bạn? –