Php正则表达式将href =“URL”替换为onclick = myfunction(URL)

时间:2011-03-28 01:04:34

标签: php regex

使用Php,我希望将所有链接替换为JavasSript函数,例如:

自: <a href="URL">abc</a>

<a onclick="SomeFunction(URL);">abc</a>

4 个答案:

答案 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', "")

或者无论正确的语法是什么,我都没有测试过。