我必须将像“você-é-um-ás-da-aviação”这样的网址转换为“voce-e-um-as-da-aviacao”,以使其在SERP上阅读友好。
我可以使用常见的替代品,但我真的不想列出每个角色,因为我发现它很笨重,我想尽可能多地保留源代码中的语言特定字符。
有可能吗?它可行吗?
答案 0 :(得分:3)
function url_safe($string){
$url = $string;
setlocale(LC_ALL, 'fr_FR'); // change to the one of your language
$url = iconv("UTF-8", "ASCII//TRANSLIT", $url);
$url = preg_replace('~[^\\pL0-9_]+~u', '-', $url);
$url = trim($url, "-");
$url = strtolower($url);
return $url;
}
答案 1 :(得分:2)
您可以使用Unicode基础提供的规范分解映射(http://www.unicode.org/Public/UNIDATA/中的文件)。
然而,这并不像你认为的那么简单 - 信不信由你,有一个“kcal”符号,其规范分解为四个字符长。
您可能还希望查阅那里的数字等效表,因为“带圆圈的数字7”应该可能映射到ASCII数字7,依此类推。
我强烈建议不要采用这种策略 - 你要对你的文本进行屠杀以获得微不足道的收益,并且在你改变之后无法恢复原始输入。
答案 2 :(得分:0)
我建议您将每个特殊字符映射,然后将其替换为数组,然后用正则表达式替换文本。
我知道您声明您不想使用常用替换,但这是唯一可行方式。您可以将它们过滤掉(通过检查它们的ascii代码是否位于特定范围内)但是对于正确的替换它们并不相同。
答案 3 :(得分:0)
您可以使用iconv的组合将字符串作为ASCII,然后使用一些preg_replace来删除不需要的字符。
类似的东西:
$string = "você-é-um-ás-da-aviação";
$collated = iconv('UTF-8', 'ASCII//TRANSLIT', $string);
$filtred = preg_replace('`[^-a-zA-Z0-9]`', '', $collated);
echo $filtred;