Php 浏览器URL问题,因为有特殊字符,如“quot&&引用;

Php 浏览器URL问题,因为有特殊字符,如“quot&&引用;,php,mysql,apache,Php,Mysql,Apache,我有一个使用PHP和MySQL数据库连接的网站。我还有一个admindashboard,它使用我编写的PHP脚本中的一些特性来控制用户 <a href="../loginUser2.php?userName=<?php echo $SQLRow["userid"];?>" target="_blank" class="a">Records</a> 在mysql中,从表中获取用户名abc&xyz或任何用户。在web浏览器中,当我为任何用户单击链接时,一切都很好

我有一个使用PHP和MySQL数据库连接的网站。我还有一个admindashboard,它使用我编写的PHP脚本中的一些特性来控制用户

<a href="../loginUser2.php?userName=<?php echo $SQLRow["userid"];?>" target="_blank" class="a">Records</a>
在mysql中,从表中获取用户名abc&xyz或任何用户。在web浏览器中,当我为任何用户单击链接时,一切都很好,然后用户在PHP的帮助下自动登录。但当在任何用户名中使用符号或特殊字符时,如我目前在“&”符号中遇到的问题。使用我自己编辑URL时,以及在web浏览器中手动键入带有替换的链接时,使用%26链接工作和用户登录成功。我只是想知道,如果任何用户在MySQL数据库中注册时包含任何特殊的字符符号,如&或等,那么我如何修复web浏览器工作自动处理这种类型的符号和字符


我在phpMyAdmin编辑用户名列中尝试了一件愚蠢的事情,并像下面这样更新用户名abc%26xyz我想当我更新时,它会像&=%26一样工作,但我失败了。

您可以使用
urlencode()
发送特殊字符和
urldecode()
获取编码值

<a href="../loginUser2.php?userName=<?php echo urlencode($SQLRow["userid"]);?>" target="_blank" class="a">Records</a>

urldecode($_GET['userName']);

urldecode($_GET['userName']);

当您在浏览器中点击url时,浏览器会进行url编码。正在将“&”转换为“%26”。因此,在loginUser2.php中,只需将“urldecode()”放在接受get参数值的位置。它将再次将您的值从“abc%26xyz”解码为“abc&xyz”

试试这个:

urldecode($_GET['userName']);

请看。与问题无关,但“当我为任何用户单击链接时,用户将在php的帮助下自动登录”表明存在严重的安全漏洞,除非后续代码验证“管理员用户”确实被授权以用户身份登录。。。但是在这个应用程序中,传递用户名似乎是一个糟糕的设计选择——您的用户可能有一个整数ID主键,传递它更明智。
$\u GET['username']
将自动解码。问题是它首先需要正确编码。没有理由使用
urldecode()
,这将自动完成。
urldecode($_GET['userName']);