从" Url Friendly"中替换任何特殊/外来字符。串

时间:2014-07-17 20:38:39

标签: php regex special-characters

我需要从String中删除任何特殊字符,将空格替换为hifens然后将其用作URL友好字符串,所以我来到了这个函数:

function removeCharacters($string){

$a = array(' ','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ÿ','Ā','ā','Ă','ă','Ą','ą','Ć','ć','Ĉ','ĉ','Ċ','ċ','Č','č','Ď','ď','Đ','đ','Ē','ē','Ĕ','ĕ','Ė','ė','Ę','ę','Ě','ě','Ĝ','ĝ','Ğ','ğ','Ġ','ġ','Ģ','ģ','Ĥ','ĥ','Ħ','ħ','Ĩ','ĩ','Ī','ī','Ĭ','ĭ','Į','į','İ','ı','IJ','ij','Ĵ','ĵ','Ķ','ķ','Ĺ','ĺ','Ļ','ļ','Ľ','ľ','Ŀ','ŀ','Ł','ł','Ń','ń','Ņ','ņ','Ň','ň','ʼn','Ō','ō','Ŏ','ŏ','Ő','ő','Œ','œ','Ŕ','ŕ','Ŗ','ŗ','Ř','ř','Ś','ś','Ŝ','ŝ','Ş','ş','Š','š','Ţ','ţ','Ť','ť','Ŧ','ŧ','Ũ','ũ','Ū','ū','Ŭ','ŭ','Ů','ů','Ű','ű','Ų','ų','Ŵ','ŵ','Ŷ','ŷ','Ÿ','Ź','ź','Ż','ż','Ž','ž','ſ','ƒ','Ơ','ơ','Ư','ư','Ǎ','ǎ','Ǐ','ǐ','Ǒ','ǒ','Ǔ','ǔ','Ǖ','ǖ','Ǘ','ǘ','Ǚ','ǚ','Ǜ','ǜ','Ǻ','ǻ','Ǽ','ǽ','Ǿ','ǿ');
$b = array('-','A','A','A','A','A','A','AE','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','U','U','U','U','Y','s','a','a','a','a','a','a','ae','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y','A','a','A','a','A','a','C','c','C','c','C','c','C','c','D','d','D','d','E','e','E','e','E','e','E','e','E','e','G','g','G','g','G','g','G','g','H','h','H','h','I','i','I','i','I','i','I','i','I','i','IJ','ij','J','j','K','k','L','l','L','l','L','l','L','l','l','l','N','n','N','n','N','n','n','O','o','O','o','O','o','OE','oe','R','r','R','r','R','r','S','s','S','s','S','s','S','s','T','t','T','t','T','t','U','u','U','u','U','u','U','u','U','u','U','u','W','w','Y','y','Y','Z','z','Z','z','Z','z','s','f','O','o','U','u','A','a','I','i','O','o','U','u','U','u','U','u','U','u','U','u','A','a','AE','ae','O','o');

return str_replace($a,$b,$string);

}

它运作正常但是当我使用一些外国字符时,一切都搞砸了。例如:

//Opening on миэт çǿůитÐфщи ђэιιø Ĵąẵ

输出保留特殊字符,我尝试使用以下方法进行额外过滤:

$string = str_replace($a,$b,$string);
return preg_replace("/[^A-Za-z0-9-]/", "", $string);

在我的函数结束时,然后输出:

//Opening-on-1084108011011090-c51136710801090D109210971080-11061101953953o-3082617861

我需要保留字符串数字,但我不希望任何其他字符需要常规字母(A-Za-z)和数字(0-9)。

我已经尝试过无线,URLify和许多其他功能,但无法做到这一点......

这可能吗?我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

这会给你一个友好的网址字符串

public function getUrlFriendlyString($string)
{
    $string = mb_strtolower($string);
    $string = str_replace(array('ä','ö','ß','ü'), array('ae','oe','ss','ue'), $string);
    $string = preg_replace('#[^0-9a-z ]#', '', $string);
    $string = preg_replace('#\s\s+#', ' ', $string);
    $string = trim($string);
    $string = str_replace(' ', '-', $string);

    return $string;
}

示例输入

Replace any Special/Foreign Characters from a “Url Friendly” String

输出

replace-any-specialforeign-characters-from-a-url-friendly-string

相关问题