Ich war gerade die Arbeit mit etwas ähnlichem, und ich kam mit diesem kleinen Stück Code nach oben Es berücksichtigt auch die Verwendung lateinischer Zeichen.
Dies ist die Probe string:
$str = 'El veloz murciélago hindú comía fe<!>&@#$%&!"#%&?¡?*liz cardillo y kiwi. La cigüeña ¨^;.-|°¬tocaba el saxofón detrás del palenque de paja';
Zuerst habe ich die Zeichenfolge zu htmlentities umbauen es einfacher zu machen, später zu verwenden.
$friendlyURL = htmlentities($str, ENT_COMPAT, "UTF-8", false);
Dann ersetze ich lateinische Zeichen mit den entsprechenden ASCII-Zeichen (á
wird a
, Ü
U
wird, und so weiter):
$friendlyURL = preg_replace('/&([a-z]{1,2})(?:acute|circ|lig|grave|ring|tilde|uml|cedil|caron);/i','\1',$friendlyURL);
Dann habe ich den String zurück aus html konvertieren Entitäten zu Symbolen, wiederum zur späteren leichteren Verwendung.
$friendlyURL = html_entity_decode($friendlyURL,ENT_COMPAT, "UTF-8");
Nächste ersetze ich alle nicht alphanumerischen Zeichen in Bindestriche.
$friendlyURL = preg_replace('/[^a-z0-9-]+/i', '-', $friendlyURL);
Ich entferne zusätzliche Bindestriche in der Zeichenfolge:
$friendlyURL = preg_replace('/-+/', '-', $friendlyURL);
Ich entferne vordere und hintere Bindestriche:
$friendlyURL = trim($friendlyURL, '-');
Und schließlich alles in Kleinbuchstaben umwandeln:
$friendlyURL = strtolower($friendlyURL);
Alle zusammen:
function friendlyUrl ($str = '') {
$friendlyURL = htmlentities($str, ENT_COMPAT, "UTF-8", false);
$friendlyURL = preg_replace('/&([a-z]{1,2})(?:acute|circ|lig|grave|ring|tilde|uml|cedil|caron);/i','\1',$friendlyURL);
$friendlyURL = html_entity_decode($friendlyURL,ENT_COMPAT, "UTF-8");
$friendlyURL = preg_replace('/[^a-z0-9-]+/i', '-', $friendlyURL);
$friendlyURL = preg_replace('/-+/', '-', $friendlyURL);
$friendlyURL = trim($friendlyURL, '-');
$friendlyURL = strtolower($friendlyURL);
return $friendlyURL;
}
Test:
$str = 'El veloz murciélago hindú comía fe<!>&@#$%&!"#%&-?¡?*-liz cardillo y kiwi. La cigüeña ¨^`;.-|°¬tocaba el saxofón detrás del palenque de paja';
echo friendlyUrl($str);
Ergebnis:
el-veloz-murcielago-hindu-comia-fe-liz-cardillo-y-kiwi-la-ciguena-tocaba-el-saxofon-detras-del-palenque-de-paja
Ich denke, Gumbo Antwort Ihr Problem besser passt, und es ist ein kürzerer Code, aber ich dachte, es wäre nützlich für andere.
Cheers, Adriana
Vielleicht möchten Sie Bindestriche hinterlassen, wenn sie direkt zwischen Wörtern sind (zB "etwas" sollte nicht zu "etwas" übersetzt werden) und anderen Sonderfällen. –