PHP中urlencode和rawurlencode的区别以及何时使用它们?
大家好!我是一名PHP初学者,对两个函数感到困惑:`urlencode()`和`rawurlencode()`。我知道它们都用于URL编码,但无法理解它们之间的根本区别以及哪个更正确。
假设我需要在URL中传递一个包含西里尔字母和空格的字符串:
```php
$string = "Привет мир!";
echo urlencode($string); // %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82+%D0%BC%D0%B8%D1%80%21
echo rawurlencode($string); // %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%BC%D0%B8%D1%80%21
```
我注意到`urlencode`将空格替换为`+`,而`rawurlencode`替换为`%20`。但当我阅读RFC 3986文档时,它说空格应该编码为`%20`。那么为什么存在使用`+`的`urlencode`函数?这是某种过时的版本吗?还是PHP的特性?
我特别想知道在以下情况下应该使用哪个:
1. 在查询字符串中构建GET参数
2. 编码