¿Cuál es la diferencia entre urlencode y rawurlencode en PHP y cuándo usar cada uno?
¡Hola a todos! Soy un desarrollador PHP principiante y tengo confusión con dos funciones: `urlencode()` y `rawurlencode()`. Sé que ambas se usan para codificar URLs, pero no puedo entender cuál es la diferencia fundamental entre ellas y qué opción es más correcta usar.
Supongamos que necesito pasar una cadena con caracteres cirílicos y espacios en una 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
```
Noté que `urlencode` reemplaza el espacio con `+`, mientras que `rawurlencode` lo reemplaza con `%20`. Pero cuando leí la documentación de RFC 3986, dice que el espacio debe codificarse como `%20`. ¿Por qué entonces existe la función `urlencode` que usa `+`? ¿Es una versión obsoleta? ¿O es una característica de PHP?
Me interesa especialmente saber qué opción usar para:
1. Formar parámetros GET en la cadena de consulta
2. Codificar