
在Web开发中,我们经常需要通过URL传递参数。例如,一个URL可能看起来像这样: page.php?clss_type=Boys%20&%20Girls
这里,我们期望clss_type参数的值是"boys & girls"。然而,当php脚本尝试通过$_get['clss_type']获取这个值时,通常会发现输出结果是"boys",而不是完整的"boys & girls"。
<?php // 假设访问的URL是 page.php?clss_type=Boys%20&%20Girls $class = $_GET['clss_type']; echo $class; // 实际输出: Boys ?>
这种现象发生的原因是PHP默认将URL查询字符串中的&字符识别为不同的GET参数之间的分隔符。当PHP解析clss_type=Boys%20&%20Girls时,它会认为Boys%20是clss_type的值,而%20Girls是另一个名为%20的参数的值。因此,$_GET['clss_type']只能获取到第一个&之前的部分。
最常见且推荐的解决方案是对URL参数值中包含的特殊字符(如&、=、?等)进行URL编码。URL编码将这些特殊字符转换为百分号编码形式,使其在URL中作为普通数据而非特殊语法符号被处理。对于&字符,其URL编码形式是%26。
将原始URL修改为: page.php?clss_type=Boys%20%26%20Girls
此时,PHP就能正确解析出完整的参数值:
<?php // 假设访问的URL是 page.php?clss_type=Boys%20%26%20Girls $class = $_GET['clss_type']; echo $class; // 输出: Boys & Girls ?>
在实际开发中,当你在PHP中构建包含动态参数的URL时,应该始终使用urlencode()函数来编码参数值,以确保所有特殊字符都被正确处理。
立即学习“PHP免费学习笔记(深入)”;
示例代码:构建URL并获取参数
<?php // 原始值 $original_value = "Boys & Girls"; // 编码参数值 $encoded_value = urlencode($original_value); // 结果: Boys%20%26%20Girls // 构建完整的URL(或URL的一部分) $url_part = "clss_type=" . $encoded_value; echo "生成的URL参数部分: " . $url_part . "\n"; // 模拟通过此URL访问后的$_GET行为 // 假设用户访问了 page.php?clss_type=Boys%20%26%20Girls $_GET['clss_type'] = "Boys & Girls"; // PHP内部会自动解码 %26 为 & // 获取参数 $retrieved_class = $_GET['clss_type']; echo "获取到的参数值: " . $retrieved_class . "\n"; ?>
注意事项:
另一种方法是修改PHP的运行时配置,即php.ini文件中的arg_separator.input指令。这个指令定义了PHP在解析URL查询字符串时,用于分隔参数的字符。默认情况下,它的值是&和;。
通过将arg_separator.input修改为其他字符(例如只使用;作为分隔符),可以避免&在参数值中被错误地解析。
修改php.ini:
找到php.ini文件(通常在PHP安装目录下),然后查找或添加以下行:
; 更改GET参数分隔符,例如只使用分号 arg_separator.input = ";"
修改后,你需要重启Web服务器(如Apache或Nginx)以使更改生效。
修改后的URL示例:
如果arg_separator.input被设置为;,那么你的URL应该这样构造: page.php?clss_type=Boys%20&%20Girls
在这种配置下,PHP将不再把&视为参数分隔符,因此$_GET['clss_type']将能正确获取到"Boys & Girls"。
注意事项:
处理URL参数中包含&等特殊字符的问题,URL编码(即方案一)是首选且最推荐的方法。它具有以下优点:
而修改php.ini虽然也能解决问题,但因其全局性和潜在的兼容性风险,通常只在特定场景下作为备选方案。在构建URL时,始终使用urlencode()函数来确保参数的正确传递和解析,是编写健壮Web应用程序的关键实践。
以上就是PHP GET参数中&字符的正确处理方法的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号