encodeURI()
الدالة encodeURI()
تُرمِّز روابط URI (اختصار للعبارة Uniform Resource Identifier) بتبديل كل نسخة من محارف معيّنة إلى عبارة مُهرَّبة (escape sequences) أو أكثر والتي تُمثِّل ترميز UTF-8 للمحرف المعني.
البنية العامة
encodeURI(URI)
encodedURI
رابط URI كامل.
القيمة المعادة
سلسلة نصية تُمثِّل النسخة المُرمَّزة من رابط URI.
الوصف
الدالة encodeURI
لا تُرمِّز المحارف التي لها معنى خاص (المحارف المحجوزة [reserved charachters]) في روابط URI، فالمثال الآتي يُظهِر ما الذي يمكن أن يحتويه رابط URI، لاحظ أنَّ بعض المحارف فيه تُستخدَم لإعطاء معنى خاص.
http://username:password@www.example.com:80/path/to/file.php?foo=316&bar=this+has+spaces#anchor
وبالتالي لن تُرمِّز الدالة encodeURI
المحارف اللازمة لإنشاء رابط URI كامل، لاحظ أنَّ الدالة encodeURI
لن تُرمِّز بعض المحارف المعروفة باسم «العلامات غير المحجوزة» (unreserved marks)، والتي ليس لها غرضٌ محجوزٌ لكن يُسمَح بوجودها في روابط URI «كما هي» (راجع RFC2496).
الدالة encodeURI
تُهرِّب (escape) جميع المحارف ما عدا:
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
تختلف الدالة encodeURI
عن الدالة encodeURIComponent
كما هو موضَّح في المثال الآتي، لاحظ أنَّ الاختلاف الرئيسي بينهما هو في ترميز المحارف المحجوزة (reserved characters):
var set1 = ";,/?:@&=+$#"; // محارف محجوزة
var set2 = "-_.!~*'()"; // علامات غير محجوزة
var set3 = "ABC abc 123"; // أحرف وأرقام وفراغات
console.log(encodeURI(set1)); // ;,/?:@&=+$#
console.log(encodeURI(set2)); // -_.!~*'()
console.log(encodeURI(set3)); // ABC%20abc%20123 (لاحظ كيف رُمِّزَ الفراغ)
console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24%23
console.log(encodeURIComponent(set2)); // -_.!~*'()
console.log(encodeURIComponent(set3)); // ABC%20abc%20123 (لاحظ كيف رُمِّزَ الفراغ)
لاحظ أنَّ الدالة encodeURI
لا يمكنها تشكيل طلبيات GET و POST لاستخدمها مع طلبيات XMLHTTPRequest
، لأنَّ المحارف &
و +
و =
لن تُرمَّز، وهذه المحارف لها معنى خاص في طلبيات GET و POST؛ لكن يمكن استخدام الدالة encodeURIComponent
لهذا الغرض، فهي تُرمِّز تلك المحارف.
يجدر بالذكر أنَّه إذا أردتَ اتباع RFC3986 الجديد لروابط URL، والذي يجعل الأقواس المربّعة محجوزةً (لعناوين IPv6) وبالتالي لن تُرمَّز عند وجودها ضمن رابط URL، فاستخدم الدالة البسيطة الآتية:
function fixedEncodeURI(str) {
return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 3rd Edition .