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

PHP:从字符串中删除各种字符-最短的方法?,php,replace,Php,Replace,我有一个字符串,它包含umlauts和其他我想替换的字符,现在我的代码如下所示: $string = preg_replace('/( +)|([()])|(\/)/', '_', $string); $string = preg_replace('/_{1,}/', '_', $string); $string = preg_replace('/_$/', '', $string); $string = str_replace('ö', 'oe', $string); $string = st

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

$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);
有没有较短的方法


谢谢:)

您可以使用
str\u将
替换为数组:

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

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


示例函数可以完全执行您想要的操作:

是的。一件事是,如果该替换表示应用程序中的某个内容(例如,从字符串中创建一个slug:
string\u 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\u replace
部分正在做一个类似于翻译表的工作。把一个换成另一个。PHP中支持此功能的函数称为

还要注意用正确的编码保存PHP文件,否则umlaut替换(
Ä
等)在您的情况下可能无法工作


此外,您可能还想了解一种称为的东西。

这如何回答某些符号转换为下划线、连续下划线折叠、尾随下划线修剪的部分?您可以指出音译,iconv支持这一点,但是,这有一些警告,如果OP要求的话,应该是答案的一部分。所以我要说的更多。是的,它不是:)这是处理符号和字符编码的最正确的方法。。。最好的答案是先转换,然后像对另一个部件一样执行@Kolink的str_替换或preg_替换。