ما الفرق بين urlencode و rawurlencode في PHP ومتى يتم استخدام كل منهما؟
```html
الجميع مرحباً! أنا مطور 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. ترميز أجزاء الـ U
```