2012-09-17 41 views
1

我有一个字符串,它包含了变音符号和其他字符我想更换,现在我的代码看起来像这样:PHP:从字符串中删除各种字符 - 最简单的方法?

$string = preg_replace('/(+)|([()])|(\/)/', '_', $string); 
$string = preg_replace('/_{1,}/', '_', $string); 
$string = preg_replace('/_$/', '', $string); 
$string = str_replace('ö', 'oe', $string); 
$string = str_replace('ü', 'oe', $string); 
$string = str_replace('ä', 'oe', $string); 
$string = str_replace('Ä', 'Ae', $string); 
$string = str_replace('Ü', 'Ue', $string); 
$string = str_replace('Ö', 'Oe', $string); 

是否有这样做的一个较短的方法吗?

谢谢:)

回答

2

你可以使用str_replace一个数组:

$find = Array(" ","(",")","/","ö","ü","ä","Ä","Ü","Ö"); 
$replace = Array("_","_","_","_","oe","oe","oe""Ae","Ue","Oe"); 
$string = str_replace($find,$replace,$string); 
$string = preg_replace("/__+/","_",$string); 
$string = rtrim($string,"_"); 
0

'最正确' 的方法是使用PHP的iconv(字符串转换为所需的字符编码)功能...

准确地做你想要的功能的示例:http://php.net/manual/en/function.iconv.php#83238

+1

请问这个答案在一些符号被转换为下划线部分,连续下划线倒塌,尾随下划线被修剪? –

+0

那么你可以指出音译和iconv支持,但是,如果* OP会要求的话,这应该是答案的一部分。我会说更多的评论。 – hakre

+0

是的,它不会:)它是处理符号和字符编码的最正确的方法...最佳答案是先转换然后做@ Kolink的str_replace或preg_replace,因为您已经为其他部分。 – Brian

0

是的。有一件事是,如果这个替换代表了你的应用程序中的某些东西(例如,从字符串创建一个slug:string_slug),首先应该将它包装到它自己的函数中,通过获取输入变量并返回输出:

function string_slug($string) { 

    $string = preg_replace('/(+)|([()])|(\/)/', '_', $string); 
    $string = preg_replace('/_{1,}/', '_', $string); 
    $string = preg_replace('/_$/', '', $string); 

    $string = str_replace('ö', 'oe', $string); 
    $string = str_replace('ü', 'oe', $string); 
    $string = str_replace('ä', 'oe', $string); 
    $string = str_replace('Ä', 'Ae', $string); 
    $string = str_replace('Ü', 'Ue', $string); 
    $string = str_replace('Ö', 'Oe', $string); 

    return $string; 
} 

正如你所看到的,旁边的代码移入函数体,我亦自某些行由他们调用该函数。但那只是作为一个附注。

是替换函数的用法是再少点麻烦且直截了当:

$string = string_slug($string); 

你能想象做你的字符串操作不太完美的方式?只需一条线,该功能对于您想要做的事情来说是完美的。

接下来,您已经询问了如何改进更换操作。这仅仅是知识,有很多方法可以做到这一点。

首先,你可以提高你对你使用这两个函数的知识。这可以向你展示如何改进正则表达式来压缩它,以及str_replace可以与数组一起工作(@Kolnik gives an example here,但操作顺序与您的原始代码不同)。

旁边的是,str_replace部分做一些所谓的像一个转换表。用另一个替换一个。 PHP中支持这个功能的函数被称为strtrDocs

还要注意保存PHP文件时使用正确的编码,否则元音替换(Ä等)可能无法正常工作。你

可能也想了解一些所谓transliteration­Wikipedia