tôi chỉ làm việc với một cái gì đó tương tự, và tôi đến với mảnh này ít mã , nó cũng dự tính việc sử dụng các ký tự latin.
Đây là chuỗi mẫu:
$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';
Trước tiên tôi chuyển đổi chuỗi thành htmlentities chỉ để làm cho nó dễ dàng hơn để sử dụng sau này.
$friendlyURL = htmlentities($str, ENT_COMPAT, "UTF-8", false);
Sau đó, tôi thay thế ký tự Latin với các nhân vật ascii tương ứng của họ (á
trở thành a
, Ü
trở thành U
, và vân vân):
$friendlyURL = preg_replace('/&([a-z]{1,2})(?:acute|circ|lig|grave|ring|tilde|uml|cedil|caron);/i','\1',$friendlyURL);
Sau đó, tôi chuyển đổi chuỗi lại từ html thực thể để biểu tượng, một lần nữa để sử dụng dễ dàng hơn sau này.
$friendlyURL = html_entity_decode($friendlyURL,ENT_COMPAT, "UTF-8");
Tiếp theo, tôi thay thế tất cả các ký tự không tự chữ và số vào dấu gạch ngang.
$friendlyURL = preg_replace('/[^a-z0-9-]+/i', '-', $friendlyURL);
tôi loại bỏ dấu gạch nối thêm bên trong chuỗi:
$friendlyURL = preg_replace('/-+/', '-', $friendlyURL);
tôi loại bỏ đầu và đuôi có dấu gạch nối:
$friendlyURL = trim($friendlyURL, '-');
Và cuối cùng chuyển đổi tất cả thành chữ thường:
$friendlyURL = strtolower($friendlyURL);
Tất cả với nhau:
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);
Kết quả:
el-veloz-murcielago-hindu-comia-fe-liz-cardillo-y-kiwi-la-ciguena-tocaba-el-saxofon-detras-del-palenque-de-paja
Tôi đoán câu trả lời Gumbo của phù hợp với vấn đề của bạn tốt hơn, và đó là một mã ngắn hơn, nhưng tôi nghĩ nó sẽ hữu ích cho người khác.
Chúc mừng, Adriana
Bạn có thể muốn để lại dấu gạch nối khi chúng trực tiếp giữa các từ (ví dụ: "một số thứ" không được dịch thành "cái gì đó") và các trường hợp đặc biệt khác. –