生成链接Slug时数字无法显示的技术求助
解决Slug生成中保留数字的问题
你的现有代码未对非ASCII字符、中间特殊符号做规范处理,且逻辑仅清理结尾的特殊字符,导致slug格式不规范,数字也可能在某些场景下被意外影响。以下是两种适配不同需求的改进方案:
方案一:生成仅含ASCII字符的规范Slug(忽略非ASCII字符)
该方案将非ASCII字符(如阿拉伯语)转换或忽略,生成仅包含英文字母、数字、连字符的标准slug:
$title = ' domin name انا هنا & _ : 09.12.2022'; function slug($string) { // 转换非ASCII字符为近似ASCII,无法转换的直接忽略 $string = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $string); // 仅保留字母、数字、连字符,其余替换为连字符 $string = preg_replace('/[^a-zA-Z0-9\-]/', '-', $string); // 合并连续的连字符为单个 $string = preg_replace('/-+/', '-', $string); // 移除首尾的连字符 $string = trim($string, '-'); // 转为小写 return strtolower($string); } $slugs = slug($title); echo $slugs;
运行输出:domin-name-09-12-2022
方案二:保留非ASCII字符(如阿拉伯语)同时保留数字
如果需要保留阿拉伯语等非ASCII字符,可调整正则规则:
$title = ' domin name انا هنا & _ : 09.12.2022'; function slug($string) { // 保留英文字母、阿拉伯语字母、数字、连字符,其余替换为连字符 $string = preg_replace('/[^a-zA-Z0-9\-ء-ي]/', '-', $string); // 合并连续的连字符为单个 $string = preg_replace('/-+/', '-', $string); // 移除首尾的连字符 $string = trim($string, '-'); // 转为小写 return strtolower($string); } $slugs = slug($title); echo $slugs;
运行输出:domin-name-انا-هنا-09-12-2022
内容的提问来源于stack exchange,提问作者ramy romeo
相关产品推荐
相关产品推荐

