php urlencode与rawurlencode的区别

本文详细解释了PHP中的urlencode和rawurlencode函数的区别,包括它们如何处理特殊字符如空格,并对比了解码函数urldecode和rawurldecode的工作原理。

转载:http://www.netingcn.com/php-urlencoderawurlencode%E7%9A%84%E5%8C%BA%E5%88%AB.html


urlencode的用途就是编码字符串,把原字符串中所有除”-_”以为的非所有字母数字字符替换成百分号(%)后跟两位十六进制数,但是需要注意:由于历史原因会把空格替换+号。rawurlencode其实和urlencode一样,也是用来编码字符串的,唯一的不同是它是使用RFC1738 编码,也就是会把空格替换成%20。

它们对应的解码函数是urldecode和rawurldecode。参考官方网站的说明,urldecode解码给出的已编码字符串中的任何%##,加号(’+')被解码成一个空格字符;rawurldecode解码字符字符串中百分号(%)后跟两位十六进制。有两点区别,一是urldecode解码是对百分号(%)后任意两位字符都去会进行解码,例如%MN也会解码,但是会失败;rawurldecode则只会对百分号(%)后两位是十六进制(0-9A-F)的字符才会解码,二是urldecode会把+号解码为空格。

通过上面对解码函数的描述,可以推论,使用urlencode或rawurlencode编码的都可以使用urldecode进行解码,但是如果原字符串中含有空格,使用urlencode编码后的字符串使用rawurlencode解码后获得的字符串会和原字符串不同。


<think>好的,我现在需要帮助用户了解PHPurlencode函数的用法,并提供示例。首先,我要回忆一下这个函数的基本作用。根据引用资料,urlencode()主要用于对URL进行编码,特别是处理特殊字符,确保它们在URL中正确传输。比如,空格会被转换成加号+,其他非字母数字字符变成百分号加十六进制数,比如%20。 用户可能需要知道什么时候使用这个函数,比如在GET请求中传递参数时,或者处理表单数据。我需要解释清楚函数的基本语法:string urlencode(string $str),参数是待编码的字符串,返回值是编码后的字符串。 接下来,我应该举几个例子,比如编码一个带有空格和特殊字符的字符串,比如“PHP教程 & 示例”,编码后应该变成“PHP%E6%95%99%E7%A8%8B+%26+%E7%A4%BA%E4%BE%8B”。这里要注意中文字符会被编码成百分号形式,空格变加号,&符号也被编码。这符合引用3中的描述。 然后,用户可能需要知道如何在URL中使用编码后的参数。例如,构造一个带查询参数的URL,将参数值用urlencode处理,确保整个URL有效。比如,编码“search term”为“search+term”,然后拼接到URL中。 还要提到和rawurlencode区别,根据引用3,rawurlencode会把空格转为%20,而urlencode转为+。这点需要强调,因为用户可能会混淆这两个函数。例如,在处理URL路径部分时,可能需要用rawurlencode,而在查询参数中用urlencode,因为表单POST数据通常用+号。 另外,需要提醒用户常见的应用场景,比如处理表单数据、生成动态链接、API请求参数编码等。同时,注意事项,比如不要对整个URL编码,只对参数部分编码,避免重复编码导致问题。 可能用户还会遇到编码后参数解码的问题,这时候需要提到urldecode函数的使用,但根据问题描述,用户目前只问编码,所以这部分可以作为补充,但不需要详细展开。 最后,确保示例代码正确,语法无误,并且符合PHP的书写规范。比如,使用echo输出结果,变量命名清晰。同时,注意在示例中展示编码前后的对比,让用户更直观理解。 总结一下,回答的结构应该是:函数作用、语法、示例、rawurlencode区别、应用场景、注意事项。这样用户能逐步了解如何使用urlencode,并在实际开发中正确应用。</think>### PHP urlencode() 函数用法详解 #### 1. 核心作用 `urlencode()` 用于将字符串编码为合法的 URL 格式,主要处理以下字符: - 空格 → `+` 号 - 非字母数字字符 → `%` 开头的十六进制编码(如 `/` → `%2F`) - 中文等特殊字符 → UTF-8 编码后再转换(如 `教程` → `%E6%95%99%E7%A8%8B`) #### 2. 基础语法 ```php string urlencode ( string $str ) ``` ```php $raw_str = "PHP教程 & 示例"; $encoded = urlencode($raw_str); echo $encoded; // 输出:PHP%E6%95%99%E7%A8%8B+%26+%E7%A4%BA%E4%BE%8B ``` #### 3. 典型应用场景 **(1) GET 请求参数编码** ```php $query = urlencode("search term"); $url = "https://example.com/search?q=".$query; // q=search+term ``` **(2) 表单数据处理** ```php $form_data = [ 'name' => '张三', 'comment' => 'This is a test & demo' ]; $encoded_str = http_build_query($form_data); // 自动调用urlencode ``` **(3) API 参数传递** ```php $api_params = [ 'app_key' => 'AB12-CD34', 'timestamp' => time() ]; $request_url = "https://api.example.com?".http_build_query($api_params); ``` #### 4. rawurlencode() 的差异 | 函数 | 空格处理 | RFC标准 | 适用场景 | |------|---------|--------|----------| | urlencode() | `+` | 表单数据标准 | 查询参数 | | rawurlencode() | `%20` | RFC 3986 | URL路径 | ```php $path_segment = rawurlencode("user files"); // user%20files $url = "/download/".$path_segment; ``` #### 5. 注意事项 1. **双重编码问题** ```php // 错误做法 $double_encoded = urlencode(urlencode("数据")); // %25E6%2595%25B0%25E6%258D%25AE // 正确做法 $correct_encoded = urlencode("数据"); // %E6%95%B0%E6%8D%AE ``` 2. **编码范围控制 ```php $partial_url = "https://example.com/".urlencode("路径/文件"); // 错误!斜杠被编码 $valid_url = "https://example.com/".rawurlencode("路径/文件"); // 保留斜杠 ``` 3. **解码对应关系** ```php $decoded = urldecode("PHP+%26+MySQL"); // 返回 "PHP & MySQL" ``` #### 6. 高级用法示例 **处理JSON参数** ```php $filters = [ 'category' => '电子设备', 'price_range' => '1000-2000' ]; $json_params = urlencode(json_encode($filters)); // 结果:%7B%22category%22%3A%22%E7%94%B5%E5%AD%90%E8%AE%BE%E5%A4%87%22%2C%22price_range%22%3A%221000-2000%22%7D ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值