我有一个带有大量链接的 PHP 字符串 $ menu 。我需要用基于链接的ID替换href。
我需要
这就是我所拥有的:
<a href="http://www.test.de/start/">Link</a>
<a href="http://www.test.de/contact/">Another Link</a>
<a href="http://www.test.de/contact/sub/">Sub Link</a>
这就是我想要的:
<a href="#start">Link</a>
<a href="#contact">Another Link</a>
<a href="#contact-sub">Another Link</a>
我使用 preg_replace
进行了尝试$search = array(
"/http:\/\/www.test.de/",
"/".preg_quote('/">', '/')."/"
);
$replacement = array('#','">');
$menu = preg_replace($search,$replacement,$menu);
我的解决方案看起来有点肮脏,并且不会替换中间的斜杠。 对于&#34;真实&#34;的任何想法模式来完成这个?
答案 0 :(得分:6)
这可以通过DOM解析轻松完成:
$html = <<<EOM
<a href="http://www.test.de/start/">Link</a>
<a href="http://www.test.de/contact/">Another Link</a>
<a href="http://www.test.de/contact/sub/">Sub Link</a>
EOM;
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $anchor) {
$href = $anchor->getAttribute('href');
if (strpos($href, 'http://www.test.de/') === 0) {
$href = '#' . strtr(trim(parse_url($href, PHP_URL_PATH), '/'), '/', '-');
$anchor->setAttribute('href', $href);
}
}
echo $dom->saveHTML();
答案 1 :(得分:1)
你可以使用php函数parse_url();创建一个url段数组。
即:
$url = 'http://www.test.de/contact/';
$urlinfo = parse_url($url);
echo "<h2>URL INFO</h2><pre>";
print_r($urlinfo);
echo "</pre>";
// create the id to be used
$linkID = "#".str_replace('/','',$urlinfo['path']);
echo $linkID;
// OUTPUT
<h2>URL INFO</h2>
Array
(
[scheme] => http
[host] => www.test.de
[path] => /contact/
)
#contact
中号
答案 2 :(得分:0)
如果域名始终相同,请尝试:
str_replace("http://www.test.de/","#", $menu);
答案 3 :(得分:0)
// Remove the domain
$menu = str_replace("http://www.text.de","",$menu);
// Remove the beginning / and add #
$menu = str_replace("\"/","\"#",$menu);
// Remove the trailing /
$menu = str_replace("/\"","\"",$menu);
// Replace all remaining / with -
$menu = str_replace("/","-",$menu);
答案 4 :(得分:0)
替换/ - -
$domain = "http://www.test.de/"
str_replace('/','-',trim(str_replace($domain, '#', $menu),'/');