PHP:从字符串中删除各种字符 - 最短的方法?

时间:2012-09-17 13:39:24

标签: php replace

我有一个字符串,它包含我要替换的变音字符和其他字符,现在我的代码看起来像这样:

$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);

有没有更短的方法呢?

谢谢:)

3 个答案:

答案 0 :(得分: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,"_");

答案 1 :(得分:0)

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

完全符合您要求的示例函数:http://php.net/manual/en/function.iconv.php#83238

答案 2 :(得分: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的内容。