Stavo lavorando con qualcosa di simile, e sono arrivato fino a questo piccolo pezzo di codice , contempla anche l'uso di caratteri latini.
Questa è la stringa di esempio:
$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';
Per prima cosa ho convertire la stringa htmlentities solo per rendere più facile da utilizzare in seguito.
$friendlyURL = htmlentities($str, ENT_COMPAT, "UTF-8", false);
Poi ho sostituire i caratteri latini con i loro caratteri ASCII corrispondenti (á
diventa a
, Ü
diventa U
, e così via):
$friendlyURL = preg_replace('/&([a-z]{1,2})(?:acute|circ|lig|grave|ring|tilde|uml|cedil|caron);/i','\1',$friendlyURL);
Poi ho convertire la stringa di ritorno da html entità ai simboli, ancora per un uso più semplice in seguito.
$friendlyURL = html_entity_decode($friendlyURL,ENT_COMPAT, "UTF-8");
Poi ho sostituire tutti i caratteri non alfanumerici in trattini.
$friendlyURL = preg_replace('/[^a-z0-9-]+/i', '-', $friendlyURL);
rimuovo trattini in più all'interno della stringa:
$friendlyURL = preg_replace('/-+/', '-', $friendlyURL);
rimuovo iniziali e finali trattini:
$friendlyURL = trim($friendlyURL, '-');
E infine convertire tutto in minuscolo:
$friendlyURL = strtolower($friendlyURL);
Tutti insieme:
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;
}
prova:
$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);
Risultato:
el-veloz-murcielago-hindu-comia-fe-liz-cardillo-y-kiwi-la-ciguena-tocaba-el-saxofon-detras-del-palenque-de-paja
Credo che la risposta di Gumbo si adatta al vostro problema in maniera migliore, ed è un codice più corto, ma ho pensato che sarebbe stato utile per gli altri.
Cheers, Adriana
Potresti voler lasciare dei trattini quando sono direttamente tra le parole (ad esempio "qualcosa" non dovrebbe tradurre in "qualcosa") e altri casi speciali. –