php中urlencode函数将字符串编码为url安全格式,空格变+、中文转utf-8十六进制,适用于表单提交;rawurlencode将空格变%20且不编码/?:,适合url路径;urldecode可逆向解码;http_build_query自动批量编码数组。

如果您需要将字符串转换为适合在URL中传输的格式,PHP提供了urlencode函数来对特殊字符进行编码。以下是使用该函数的具体方法:
一、基本用法:使用urlencode函数对字符串编码
urlencode函数会将字符串中的空格替换为+号,其他非字母数字字符替换为%后跟两位十六进制数。该函数适用于application/x-www-form-urlencoded格式的数据编码。
1、定义原始字符串变量,例如 $str = "Hello World! 你好";
2、调用 urlencode($str) 函数,将返回编码后的字符串。
立即学习“PHP免费学习笔记(深入)”;
3、输出结果为 Hello+World%21+%E4%BD%A0%E5%A5%BD,其中中文被转为UTF-8字节序列再十六进制编码。
二、处理中文与多字节字符
urlencode默认按字节处理,对UTF-8编码的中文字符串可直接使用,但需确保脚本文件及运行环境均为UTF-8编码,否则可能产生乱码或错误编码结果。
1、确认当前PHP文件保存为UTF-8无BOM格式。
2、在脚本开头设置内部编码,如 mb_internal_encoding("UTF-8");
3、对中文字符串如 "测试" 调用 urlencode,得到 %E6%B5%8B%E8%AF%95。
三、与rawurlencode的区别
urlencode将空格编码为+,而rawurlencode遵循RFC 3986标准,将空格编码为%20,且不编码/、?等URL保留字符,更适合构造URL路径部分。
1、对字符串 "path/file name.php?x=1&y=2" 使用 urlencode,空格变为+,斜杠保持不变。
2、使用 rawurlencode 编码相同字符串,空格变为%20,其余特殊字符同样转义,但 / 和 ? 不会被编码。
3、若需构造完整URL路径,推荐使用 rawurlencode;若用于表单数据提交,则 urlencode 更符合标准。
四、解码操作:使用urldecode还原字符串
urldecode函数是urlencode的逆向操作,用于将已编码的字符串恢复为原始内容,它会将+号还原为空格,%XX序列还原为对应字节。
1、获取经urlencode编码的字符串,如 $encoded = "name%3Dphp%2Btest%21";
2、调用 urldecode($encoded),返回 name=php+test!。
3、注意:urldecode不会自动处理字符编码,若原字符串含UTF-8中文,解码后仍为UTF-8字节流,需确保输出环境支持UTF-8显示。
五、批量编码数组参数
当需将关联数组转换为URL查询字符串时,可结合http_build_query函数,该函数内部自动对键名和值调用urlencode,生成标准格式的query string。
1、定义数组 $data = ["q" => "PHP教程", "page" => 1];
2、调用 http_build_query($data),返回 q=PHP%E6%95%99%E7%A8%8B&page=1。
3、该函数默认使用UTF-8编码,不支持自定义编码方式,如需GBK等编码,须先手动转换字符串再传入。











