正则表达式需要更改URL

时间:2012-06-30 04:12:23

标签: php regex preg-replace

我想将这些网址转换为seo友好网址:

index.php?t=1&s=1&offset=50&hits=50   --->  index-t-1-s-1-offset-50-hits-50.html
index.php?t=1&s=1                     --->  index-t-1-s-1.html
index.php?t=1&s=&offset=50&hits=50    --->  index-t-1-s-1-offset-50-hits-50.html
index.php?t=1                         --->  index-t-1.html

我写了这个:

$filename = substr(basename($base_href),0,'-4');
$str = preg_replace('/href=\'\?t=(\d+)&s=(\d+)\'/i', 'href=\''.$filename.'-t-$1-s-$2.html\'', $str);

但我需要一个通用的表达方式。你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

我注意到您已将.php??我认为是可选的)术语和所有符号替换为-,最后添加.html。所以,你只需要这样做:

$filename = "index.php?t=1&s=1&offset=50&hits=50";
$result = preg_replace('/(?:\.php\??|\W)/', '-', $filename) . '.html';
//~> index-t-1-s-1-offset-50-hits-50.html

它会:

  • .php?.php替换为-;
  • 将非字母\W(不与\w混淆)替换为-;
  • 在结果
  • 上附加.html

详细了解正则表达式here

答案 1 :(得分:0)

对于解决方案,我首先将网址拆分为?,然后将所有&=替换为-,然后将字符串连接回来(在处理之后)删除网址其他部分的.php