在構建 SEO 友好的 URL 或生成靜態頁面別名時,常需將標題字符串轉換為僅含字母、數字和連字符的格式。本文提供兩個針對不同字符集的實用函數。
function tourl($str) {
$str = preg_replace('/[^a-zA-Z0-9]+/', '-', $str);
$str = trim($str, '-');
return strtolower($str);
}
邏輯說明: 非字母數字字符替換為連字符 → 去除首尾連字符 → 全部小寫。
function strtourl($str) {
$str = htmlentities($str, ENT_QUOTES, "UTF-8");
$str = preg_replace('/&([a-z]{1,2})(?:acute|lig|grave|ring|tilde|uml|cedil|caron);/i', '\1', $str);
$str = html_entity_decode($str, ENT_QUOTES, "UTF-8");
$str = preg_replace('/[^a-z0-9]+/i', '-', $str);
return strtolower($str);
}
關鍵步驟:
htmlentities 將特殊字符轉為 HTML 實體html_entity_decode 還原為純文本PHP 內置 urlencode()、rawurlencode() 等函數可直接處理 URL 編碼,適用於查詢參數值編碼場景;但生成可讀性路徑別名時,上述自定義函數更合適。
strtourl()--- 出現mb_strtolower() 處理多字節字符更穩健