如何在button标签的onclick href中传递PHP变量至另一页面?
问题分析与解决方法
你的问题核心在于button标签的onclick属性中PHP变量的拼接语法错误,导致浏览器无法正确解析跳转URL,而a标签的写法是正确的PHP输出拼接,所以能正常工作。
为什么button代码失效?
看你写的button代码:
<button id = 'sendMsg' onclick = "location.href='chat.php?usernames="'.$username.'"'">Send Message</button>
这里的引号嵌套完全混乱了:HTML的onclick用双引号包裹,里面的location.href用单引号,但你错误地把PHP的变量拼接("'.$username.'")直接插在了HTML字符串里,浏览器会把这些PHP语法当成普通文本解析,最终生成的URL是错误的,自然无法正常跳转。
而你的a标签代码是用echo输出整个HTML结构,变量拼接是在PHP语境下完成的,引号处理正确,所以浏览器能拿到完整有效的URL。
两种修复方案
方案1:和a标签一致,用PHP echo输出整个button(推荐)
把button标签放在PHP的echo语句里,像a标签那样正确拼接变量,注意转义内部的双引号:
// 先对URL中的变量进行编码,避免特殊字符导致的问题,同时防范XSS $encodedUsername = urlencode($username); echo "<button id='sendMsg' onclick=\"location.href='chat.php?usernames={$encodedUsername}'\">Send Message</button>";
这里用{$encodedUsername}的写法比.拼接更简洁,也不容易出错;urlencode是必要的,能处理用户名里的空格、特殊字符等问题,同时提升安全性。
方案2:在HTML中直接嵌入PHP变量
如果不想用echo输出整个button,可以在HTML的onclick属性里直接用PHP输出变量:
<?php // 同样先编码变量 $encodedUsername = urlencode($username); ?> <button id='sendMsg' onclick="location.href='chat.php?usernames=<?php echo $encodedUsername; ?>'">Send Message</button>
这种写法把PHP变量直接嵌入到HTML的URL中,浏览器解析时会替换成正确的用户名值。
额外提醒
因为你的$username是通过$_GET获取的,一定要注意安全:
- 用
urlencode处理后再拼接到URL中,避免URL格式错误 - 接收变量的页面(chat.php)也要对
$_GET['usernames']进行过滤处理,比如用htmlspecialchars输出,防止XSS攻击
内容的提问来源于stack exchange,提问作者Sang Tonsing
相关产品推荐
相关产品推荐

