1

我有一个字符串,它包含变音符号和其他要替换的字符,现在我的代码如下所示:

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

有没有更短的方法呢?

谢谢 :)

4

3 回答 3

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,"_");
于 2012-09-17T13:43:30.937 回答
0

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

完全按照您的意愿执行的示例函数:http: //php.net/manual/en/function.iconv.php#83238

于 2012-09-17T13:45:33.133 回答
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在这里给出了一个示例,但是操作顺序与您的原始代码不同)。

接下来,该str_replace部分正在做一些类似于翻译表的事情。用另一个替换一个。PHP 中支持这一点的函数称为strtrDocs

还要注意使用正确的编码保存 PHP 文件,否则变音符号替换(Ä等)可能不适用于您的情况。

此外,您可能想了解称为音译Wikipedia 的内容

于 2012-09-17T13:59:15.467 回答