PHP preg_match_all动态删除url参数

dav*_*rko 0 php regex string preg-match-all preg-match

我想只获取没有任何参数的url的"清洁"版本.IOW ...如果网址内有问号,请将其删除,然后删除所有内容.

这是我目前的行:

preg_match_all('/<a(.*?)href=("|\'|)(.*?)("|\'| )(.*?)>/s',$content,$ahref);
Run Code Online (Sandbox Code Playgroud)

而且在这里要更清楚......我期待这个网址(例如):

/go/page/mobile_download_apps.html?&who=r,6GDewh28SCW3/fUSqmWqR_E9ljkcH1DheIMqgbiHjlX3OBDbskcuCZ22iDvk0zeZR7BEthcEaXGFWaQ4Burmd4eKuhMpqojjDE6BrCiUtLClkT32CejpMIdnqVOUmWBD
Run Code Online (Sandbox Code Playgroud)

将会 :

/go/page/mobile_download_apps.html
Run Code Online (Sandbox Code Playgroud)

Cas*_*yte 5

使用DOMDocument,strpos,substr:

$dom = new DOMDocument;
$dom->loadHTML($content);

$linkNodeList = $dom->getElementsByTagName('a');

foreach($linkNodeList as $linkNode) {
    $href = $linkNode->getAttribute('href');

    if ( false !== ($offset = strpos($href, '?')) )
        $linkNode->setAttribute('href', substr($href, 0, $offset));
}

$newContent = $dom->saveHTML();
Run Code Online (Sandbox Code Playgroud)

或爆炸:

$linkNode->setAttribute('href', explode('?', $href)[0]);
Run Code Online (Sandbox Code Playgroud)