我试图摆脱字符串中的一些字符。该字符串将由表单(方法:POST)提交。 我需要一个小写字符串。角色ä,ö,ü和ß应该成为ae,oe,ue和ss。应删除所有其他特殊字符和空格。
字符串
Lorem_ipsum_Ö-ß &änyOther char
应该成为
lorem-ipsum-oe-ss-aenyother-char
这是我的代码:
$slug = strtolower($_POST['title']);
$slug = trim($slug, '-');
$slug = preg_replace('/ä/g', 'ae', $slug);
$slug = preg_replace('/ö/g', 'oe', $slug);
$slug = preg_replace('/ü/g', 'üe', $slug);
$slug = preg_replace('/ß/g', 'ss', $slug);
$slug = preg_replace('/[^\w ]/g', '', $slug);
$slug = preg_replace('/ +/g', '-', $slug);
首先,我的尝试不能按照我的意愿行事。
第二:如何让这段代码更小?我想有可能只用一个正则表达式...
答案 0 :(得分:1)
/g
没有preg_match
修饰符。您可以使用preg_match_all
,也可以将其删除。
相反,如果您只是想要制作更清晰的网址并且您尝试将代码最小化为1-liner,我们可以使用iconv
TRANSLIT
将字符集转换为我们选择的最接近的字符集,例如UTF-8,然后你可以把它全部包装成1个衬里。
$slug = strtolower(urlencode(preg_replace('/[\s\-]/', '', iconv('utf-8', 'ascii//TRANSLIT',$str))));
答案 1 :(得分:1)
您始终可以创建一个功能来执行此操作。你可以根据自己的需要调整它,这是一个例子。
function _replace($t) {
$map = array( 'Ä' => 'ae', 'ä' => 'ae', 'ß' => 'ss', 'Ö' => 'oe',
'ö' => 'oe', 'Ü' => 'ue', 'ü' => 'ue' );
$slug = strtr(strtolower(trim($t)), $map);
return preg_replace('~[\W_]+~', '-', $slug);
}