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
الدعم الأساسي نعم نعم نعم نعم نعم

مصادر ومواصفات