如何让PHP表单提交后跳转到页面指定锚点位置?
解决表单提交后定位到指定锚点的问题
嘿,这个需求很好实现,你只需要在表单的action属性里,把锚点#ContactUs直接追加到当前页面的URL后面就可以啦!
具体修改方法
原来的action指向当前页面,现在我们只需要在htmlspecialchars($_SERVER["PHP_SELF"])的末尾加上#ContactUs,修改后的完整表单代码如下:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>#ContactUs"> <h2>SEND US A MESSAGE!</h2> <span>We'd be happy to hear from you.</span> <input name="contactname" placeholder="Name" type="text" value="<?php echo $contactname;?>"/> <span class="error"> <?php echo $contactnameErr;?></span> <input name="contactemail" placeholder="Email" type="text" value="<?php echo $contactemail;?>" /> <span class="error"> <?php echo $contactemailErr;?></span> <input name="contactphone" placeholder="Phone #" type="text" value="<?php echo $contactphone;?>" /> <span class="error"> <?php echo $contactphoneErr;?></span> <input name="contactsubject" placeholder="Subject" type="text" value="<?php echo $contactsubject;?>" /> <span class="error"> <?php echo $contactsubjectErr;?></span> <textarea name="contactmessage" placeholder="Message"><?php echo $contactmessage;?></textarea> <span class="error"> <?php echo $contactmessageErr;?></span> <input type="submit" name="submit" value="Send" class="contact-button" /> </form>
原理说明
$_SERVER["PHP_SELF"]会输出当前页面的路径(比如/contact.php),加上#ContactUs后,完整的action路径就变成了/contact.php#ContactUs- 表单提交后,服务器处理完请求会返回这个带锚点的URL,浏览器加载页面时会自动滚动到ID为
ContactUs的元素位置,而不是停在页面顶部 - 你原本使用的
htmlspecialchars()安全处理依然有效,锚点的添加不会影响XSS防护的效果
如果你的页面需要保留原有GET参数(不过你这里是POST提交,大概率不需要),也可以用$_SERVER["REQUEST_URI"]替代$_SERVER["PHP_SELF"],这样会保留原参数再追加锚点:
action="<?php echo htmlspecialchars($_SERVER["REQUEST_URI"]);?>#ContactUs"
你的场景用第一种方法就完全足够,提交后就能直接定位到表单所在的章节啦!
内容的提问来源于stack exchange,提问作者user7274404




