PHP preg_match_all 即时删除 url 参数
PHP preg_match_all remove url parameters on the fly
我只想获取 url 的 'cleaner' 版本,不带任何参数。
IOW...如果 url 中有问号,请将其和之后的所有内容删除。
这是我当前的行:
preg_match_all('/<a(.*?)href=("|\'|)(.*?)("|\'| )(.*?)>/s',$content,$ahref);
这里要说得更清楚...我希望这个 url(例如):
/go/page/mobile_download_apps.html?&who=r,6GDewh28SCW3/fUSqmWqR_E9ljkcH1DheIMqgbiHjlX3OBDbskcuCZ22iDvk0zeZR7BEthcEaXGFWaQ4Burmd4eKuhMpqojjDE6BrCiUtLClkT32CejpMIdnqVOUmWBD
将是:
/go/page/mobile_download_apps.html
你是指这种行为吗:
<a\s+href\s*=\s*"\K[^"?]+
$result = preg_replace('/<a\s+href\s*=\s*"\K[^"?]+/im', '', $text);
如评论中所述,您不应使用正则表达式获取标记,而应使用解析器。不过,给你:
<a[^>]+href=("|')([^"'?]*)[^"']*[^>]*>
使用 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();
或爆炸:
$linkNode->setAttribute('href', explode('?', $href)[0]);
哎呀...我这边注意力不集中:)
自己解决了...(超级简单)
这是最后一行:
preg_match_all('/<a(.*?)href=("|\'|)(.*?)(\?|"|\'| )(.*?)>/s',$content,$ahref);
我只想获取 url 的 'cleaner' 版本,不带任何参数。 IOW...如果 url 中有问号,请将其和之后的所有内容删除。
这是我当前的行:
preg_match_all('/<a(.*?)href=("|\'|)(.*?)("|\'| )(.*?)>/s',$content,$ahref);
这里要说得更清楚...我希望这个 url(例如):
/go/page/mobile_download_apps.html?&who=r,6GDewh28SCW3/fUSqmWqR_E9ljkcH1DheIMqgbiHjlX3OBDbskcuCZ22iDvk0zeZR7BEthcEaXGFWaQ4Burmd4eKuhMpqojjDE6BrCiUtLClkT32CejpMIdnqVOUmWBD
将是:
/go/page/mobile_download_apps.html
你是指这种行为吗:
<a\s+href\s*=\s*"\K[^"?]+
$result = preg_replace('/<a\s+href\s*=\s*"\K[^"?]+/im', '', $text);
如评论中所述,您不应使用正则表达式获取标记,而应使用解析器。不过,给你:
<a[^>]+href=("|')([^"'?]*)[^"']*[^>]*>
使用 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();
或爆炸:
$linkNode->setAttribute('href', explode('?', $href)[0]);
哎呀...我这边注意力不集中:)
自己解决了...(超级简单)
这是最后一行:
preg_match_all('/<a(.*?)href=("|\'|)(.*?)(\?|"|\'| )(.*?)>/s',$content,$ahref);