Я просто работал с чем-то подобным, и я придумал этот маленький кусочек кода , он также предполагает использование латинских символов.
Это образец строка:
$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
Я думаю, ответ илистый умещается вашу проблему лучше, и это более короткий код, но я думал, что это будет полезно для других.
Приветствия, Adriana
Возможно, вы захотите оставить дефисы, когда они находятся непосредственно между словами (например, «что-то» не следует переводить на «что-то») и другими особыми случаями. –