我想在php中执行以下功能。
“”如果文本中有URL格式,则URL将成为链接。 单击URL的链接时,将调用onclick事件。 然后生成来自onclick事件的警报。 “”
我正在写下面的代码,但效果不好。
你能告诉我如何解决这个问题吗?
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>test</title>
</head>
<body>
<?php
function makeLink($value) {
return mb_ereg_replace("(https?)(://[[a-zA-Z0-9]\+\$\;\?\.%,!#~*/:@&=_-]+)", '<a href="#" onclick="alert($value);">\1\2</a>' , $value);
}
$text = 'HELLO!! http://google.com';
echo makeLink($text);
?>
</body>
</html>
答案 0 :(得分:0)
我相信你想要'<a href="#" onclick="alert('.$value.');">\1\2</a>'
根据php的版本,有几种方法可以在字符串中使用变量。在您的情况下,您只是编写字符串$value
,而不是使用变量。
我所做的是结束字符串(使用单引号)然后使用点.
来连接变量,然后继续字符串(再次单引号)。
如果使用双引号,您可以这样做:
$foo = 'code';
echo "this $foo works"; //will echo "this code works"
您的代码还有很多其他问题。值得注意的是,在你的html中使用“onclick”从来就不是一个好习惯,只是让你的代码更加混乱。在javascript和php之间进行通信的正确现代方法是通过ajax,但如果你必须采用这种方法,至少将你的javascript放入<script>
标签并在该标签的开头,将你需要的信息输入到javascript变量中。总之,像这样:
所以,完全删除整个正则表达式的东西......根据你在这里的例子,它是无用的和臃肿的。
<?php
$text = 'HELLO!! http://google.com';
$linkId = 'my-link';
echo '<a href="#" id="'.$linkId.'">12</a>';
?>
<script>
var text = '<?php echo $text; ?>';
var linkId = '<?php echo $linkId; ?>';
var linkElem = document.getElementById(linkId);
linkElem.addEventListener('click', function() {
myFunction(text);
});
function myFunction(text) {
alert(text);
}
</script>
如果你这样做,它至少会更好,但整个方法仍然存在很大缺陷。我建议学习关注点分离和SOLID原则。这是全局的,难以阅读,难以调试等等。