Se si sa che cosa le possibili URL corretti potrebbero essere, è possibile utilizzare:
levenshtein($givenURL, $possibleURL)
Esempio da documenti PHP, commenti rimossa per brevità:
$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";
Uscite:
Parola di immissione: carrot
Intendevi: carota?
Questo è un bene quando si pensa persone possono avere omesso una lettera o mettere uno in più, ma potrebbe cadere a breve, quando la gente davvero non so come si scrive una parola e si avvicinò con qualcosa di creativo!
Se si preferisce il percorso soundex()
, dare un'occhiata alla funzione metaphone()
.
mi piace l'idea di utilizzare metaphone()
fianco levenshtein()
o
similar_text()
, in quanto restituisce una rappresentazione fonetica della parola, e si vuole ancora vedere come simile è a vostro originale.
Esempi:
metaphone('name') = NM
metaphone('naaaaaameeeeeeee') = NM
metaphone('naiym') = NM
metaphone('naiyem') = NYM
Mentre un sacco di errori ortografici tornerà delle partite identico, l'ultimo esempio mostra che realmente vuole ancora trovare la corrispondenza più vicina con qualcosa di simile levenshtein()
Per l'efficienza, se si utilizza un diverso file 404 in cui le riscritture hanno cercato di abbinare questo modello e non è riuscito, rispetto a quello che si usa per il resto del sito, in realtà non dovrebbe essere un sovraccarico.
Se si ottiene lo stesso 404 dallo stesso referente, (e non è possibile indurli a cambiare il collegamento), potrebbe valere la pena di inserire una riscrittura statica in quel caso.
Per i file statici, c'è [mod_speling] (http://httpd.apache.org/docs/2.1/mod/mod_speling.html). –
"ottengo qualche decina di 404 da siti diversi" Che cosa significa? Vuoi dire che i siti hanno collegamenti interrotti al tuo sito? –