我有一个字符串,它包含我要替换的变音字符和其他字符,现在我的代码看起来像这样:
$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);
有没有更短的方法呢?
谢谢:)
答案 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中支持此功能的函数称为strtr
Docs。
另外请注意使用正确的编码保存PHP文件,否则变音符号替换(Ä
等)可能不适用于您的情况。
此外,您可能想要了解名为transliterationWikipedia的内容。