مشفر URL

ترميز النص للاستخدام الآمن في عناوين URL. تحويل الأحرف الخاصة إلى تنسيق مشفر بالنسبة المئوية.

0 حرف

ما هو ترميز URL؟

ترميز URL، المعروف أيضًا باسم ترميز النسبة المئوية، هو آلية لترميز الأحرف الخاصة في عناوين URL. يمكن لعناوين URL أن تحتوي فقط على أحرف معينة من مجموعة ASCII، لذا يجب تحويل الأحرف الأخرى إلى تنسيق صالح.

الاستخدامات الشائعة لترميز URL

  • معاملات سلسلة الاستعلام: عند بناء عناوين URL مع معاملات الاستعلام، قم بترميز كل من المفاتيح والقيم لمنع كسر بنية URL. على سبيل المثال، "search=coffee & tea" تصبح "search=coffee%20%26%20tea". بدون الترميز، سيتم تفسير & كفاصل معامل، وليس كجزء من مصطلح البحث. هذا هو حالة الاستخدام الأكثر شيوعًا. كل نموذج بحث أو فلتر أو واجهة برمجة تطبيقات مع معاملات الاستعلام تتطلب ترميز URL.
  • بناء نقطة نهاية API: غالبًا ما تتضمن واجهات برمجة تطبيقات REST معاملات في مسار URL أو سلسلة الاستعلام. عند استدعاء واجهات برمجة التطبيقات بإدخال المستخدم أو أحرف خاصة أو قيم ديناميكية، قم بترميز المعاملات لمنع أخطاء HTTP 400. على سبيل المثال، البحث عن "[email protected]" في واجهة برمجة تطبيقات يتطلب ترميز رمز @: /api/users/user%40example.com.
  • إرسال نماذج HTML (GET): عندما تستخدم نماذج HTML method="GET"، تقوم المتصفحات تلقائيًا بترميز بيانات النموذج بـ URL قبل الإرسال. إذا كنت تبني عناوين URL يدويًا أو تستخدم JavaScript لإرسال النماذج، يجب عليك ترميز البيانات بنفسك. يستخدم ترميز النموذج تنسيق application/x-www-form-urlencoded، حيث تصبح المسافات + (على الرغم من أن %20 يعمل أيضًا).
  • الأحرف الدولية و Unicode: يجب ترميز الأحرف غير ASCII (الأحرف المشكلة مثل é، ñ، ü، الأحرف الصينية/اليابانية/الكورية، العربية، السيريلية، الرموز التعبيرية) بـ URL. يتم أولاً ترميز الحرف إلى بايتات UTF-8، ثم يصبح كل بايت %XX. على سبيل المثال، "café" تصبح "caf%C3%A9" (é = بايتات UTF-8 C3 A9).
seo.url_encode.heading_how

seo.url_encode.how_desc

  • seo.url_encode.how_step1
  • seo.url_encode.how_step2
  • seo.url_encode.how_step3
  • seo.url_encode.how_step4

seo.url_encode.how_example

RFC 3986 ومعيار URL

تم توحيد ترميز URL في RFC 3986 (2005)، الذي يحدد بناء جملة معرف الموارد الموحد (URI). يحدد المعيار الأحرف "غير المحجوزة" (آمنة للاستخدام كما هي: A-Z، a-z، 0-9، -، _، .، ~) والأحرف "المحجوزة" (لها معنى خاص: :، /، ?، #، [، ]، @، !، $، &، '، (، )، *، +، ,، ;، =). يجب ترميز الأحرف المحجوزة بالنسبة المئوية عند استخدامها حرفيًا في عناوين URL. قبل هذا المعيار، استخدمت أنظمة مختلفة طرق ترميز مختلفة، مما أدى إلى مشاكل التوافق. وحّد RFC 3986 ترميز URL عبر الويب.

الأمان وترميز URL

يجعل ترميز URL البيانات آمنة لعناوين URL ولكنه لا يشفرها أو يؤمنها. يمكن فك تشفير عناوين URL المشفرة بسهولة. استخدم دائمًا HTTPS للبيانات الحساسة. تعرف على أمان الترميز

ترميز URL في لغات البرمجة

توفر كل لغة برمجة وظائف ترميز URL. إليك أمثلة شاملة:

// urlencode() - لبيانات النموذج (المسافات تصبح +)
$encoded = urlencode($data);

// rawurlencode() - متوافق مع RFC 3986 (المسافات تصبح %20)
$encoded = rawurlencode($data);

// بناء سلاسل الاستعلام
$params = http_build_query([
    'search' => 'coffee & tea',
    'category' => 'food/drink'
]);
// النتيجة: search=coffee+%26+tea&category=food%2Fdrink
// encodeURIComponent() - لمعاملات الاستعلام (استخدم هذا!)
const encoded = encodeURIComponent('hello world & stuff');
// النتيجة: hello%20world%20%26%20stuff

// encodeURI() - لعناوين URL الكاملة (نادرًا ما تحتاج)
const fullUrl = encodeURI('https://example.com/path with spaces');

// بناء عناوين URL مع المعاملات
const baseUrl = 'https://api.example.com/search';
const query = encodeURIComponent('[email protected]');
const url = `${baseUrl}?q=${query}`;
from urllib.parse import quote, quote_plus, urlencode

# quote() - ترميز RFC 3986
encoded = quote('hello world & stuff')
# النتيجة: hello%20world%20%26%20stuff

# quote_plus() - ترميز النموذج (المسافات تصبح +)
encoded = quote_plus('hello world')
# النتيجة: hello+world

# urlencode() - بناء سلاسل الاستعلام
params = urlencode({'search': 'coffee & tea', 'page': 1})
# النتيجة: search=coffee+%26+tea&page=1
import (
    "net/url"
    "fmt"
)

// QueryEscape() - ترميز معامل الاستعلام
encoded := url.QueryEscape("hello world & stuff")
// النتيجة: hello+world+%26+stuff

// PathEscape() - ترميز أجزاء المسار
encoded := url.PathEscape("hello/world")
// النتيجة: hello%2Fworld

// بناء عناوين URL مع المعاملات
u, _ := url.Parse("https://api.example.com/search")
q := u.Query()
q.Set("search", "coffee & tea")
u.RawQuery = q.Encode()
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

// ترميز URL (حدد دائمًا UTF-8)
String encoded = URLEncoder.encode("hello world & stuff",
                                   StandardCharsets.UTF_8);
// النتيجة: hello+world+%26+stuff

// بناء عناوين URL
String baseUrl = "https://api.example.com/search?q=";
String query = URLEncoder.encode("[email protected]",
                                 StandardCharsets.UTF_8);
String fullUrl = baseUrl + query;
require 'uri'
require 'cgi'

# URI.encode_www_form_component() - الترميز القياسي
encoded = URI.encode_www_form_component('hello world & stuff')
# النتيجة: hello+world+%26+stuff

# CGI.escape() - بديل
encoded = CGI.escape('hello world')

# بناء سلاسل الاستعلام
params = URI.encode_www_form({search: 'coffee & tea', page: 1})
# النتيجة: search=coffee+%26+tea&page=1
using System;
using System.Web;
using System.Net;

// HttpUtility.UrlEncode() - الترميز القياسي
string encoded = HttpUtility.UrlEncode("hello world & stuff");
// النتيجة: hello+world+%26+stuff

// Uri.EscapeDataString() - RFC 3986 (بدون تبعية System.Web)
string encoded = Uri.EscapeDataString("hello world & stuff");
// النتيجة: hello%20world%20%26%20stuff

الأدوات ذات الصلة

هل تحتاج إلى فك تشفير سلاسل مشفرة بـ URL؟ استخدم فك تشفير URL لتحويل النص المشفر بالنسبة المئوية مرة أخرى إلى تنسيق قابل للقراءة.

ترميز البيانات الثنائية؟ جرب مشفر Base64 لتحويل البيانات الثنائية إلى تنسيق نصي.

عرض النص على صفحات الويب؟ استخدم مشفر كيانات HTML لترميز أحرف HTML الخاصة بأمان.