Я просто работал с чем-то похожим, и я придумал этот маленький кусочек кода, он также предполагает использование латинских символов.
Это пример строки:
$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';
Сначала я преобразую строку в htmlentities, чтобы потом было легче ее использовать.
$friendlyURL = htmlentities($str, ENT_COMPAT, "UTF-8", false);
Затем я заменяю латинские символы соответствующими символами ascii (á
становится a
, Ü
становится U
и т. Д.):
$friendlyURL = preg_replace('/&([a-z]{1,2})(?:acute|circ|lig|grave|ring|tilde|uml|cedil|caron);/i','\1',$friendlyURL);
Затем я преобразую строку обратно из объектов HTML в символы, снова дляпроще использовать позже.
$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);
Все вместе:
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;
}
Тест:
$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);
Результат:
el-veloz-murcielago-hindu-comia-fe-liz-cardillo-y-kiwi-la-ciguena-tocaba-el-saxofon-detras-del-palenque-de-paja
Я думаю, что ответ Гамбо лучше подходит вашей проблеме, и это более короткий код, но я подумал, что он будет полезен для других.
Приветствия, Адриана