使用Php,我希望将所有链接替换为JavasSript函数,例如:
自:
<a href="URL">abc</a>
要
<a onclick="SomeFunction(URL);">abc</a>
答案 0 :(得分:2)
您应该使用PHP’s DOM提供的DOM操作:
$doc = new DOMDocument();
$doc->loadHTML($html);
foreach ($doc->getElementsByTagName('a') as $elem) {
if ($elem->hasAttribute('href')) {
$elem->setAttribute('onclick', 'SomeFunction('.json_encode($elem->getAttribute('href')).')');
$elem->removeAttribute('href');
}
}
答案 1 :(得分:0)
<script>
function SomeFunction(url) {
window.location.href = url;
}
</script>
<?php
$html = '<a href="http://www.google.com">Google</a>';
$html = preg_replace('/<a href="(.+?)">/', '<a href="javascript:void(0);" onclick="SomeFunction(\'$1\');">', $html);
echo $html;
?>
答案 2 :(得分:0)
在没有正则表达式的情况下解析HTML有一些东西......
$str = 'Hello <a href="bob">bob</a>
<p><a href="hello">heya</a>';
$dom = new DOMDocument();
$dom->loadHTML($str);
foreach($dom->getElementsByTagName('a') as $a) {
$href = $a->getAttribute('href');
$a->removeAttribute('href');
$a->setAttribute('onclick', 'SomeFunction(\'' . $href . '\')');
}
echo $dom->saveHTML();
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<p>Hello <a onclick="SomeFunction('bob')">bob</a>
</p>
<p><a onclick="SomeFunction('hello')">heya</a></p>
</body></html>
答案 3 :(得分:0)
如果您想保持href
只使用
$elem->setAttribute('href', "")
或者无论正确的语法是什么,我都没有测试过。