PHP:从字符串中删除各种字符-最短的方法?
我有一个字符串,它包含umlauts和其他我想替换的字符,现在我的代码如下所示: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
$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_替换。