تشفير الروابط والنصوص بواسطة الترميز UTF-8

مدرج تحت قسم: مقالات
23 يونيو 2008

في كثير من الاحيان يفكر البعض لماذا لا نستعمل عنوان الموضوع ليكون المعتمد عليه في عملية جلب بيانات هذا الموضوع عن طريق GET في صفحة ديناميكية معينة , وليس كما جرت العادة بالاعتماد على id هذا الموضوع وخاصة عندما يكون عنوان الموضوع باللغة العربية … ان الناظر لواقع المواقع العملاقة اليوم والمتصدرة لائحة الترتيب الاقوى في محركات البحث يلاحظ بأنها تستعمل هذه التقنية الرائعة امثال موسوعة ويكيبيديا وشركة ووردبرس وجميع المدونات المستخدمة نظامها حول العالم … وطبعا لا ننسى عملاق البحث جوجل .

ما هي الرموز المحبذ تحويلها الى الترميز utf-8 لكي تستعمل في الرابط ؟

انه ولكي تتم عملية تحويل الرابط بنجاح … ولكي يتجلى المقصد من وراء تحويل الرابط الى الترميز utf-8 فان الرموز الاصلية للرابط يجب ان تكون اية رموز مع عدا رموز مجموعة المحارف ASCII , فمثلا يمكن ان نحول رموز او حروف اللغة العربية او الروسية او العبرية والسبب لان رموز او حروف اي من هذه اللغات لا تدخل في تركيب مجموعة المحارف ASCII وقس على ذلك الكثير الكثير من لغات العالم .
احيانا نحتاج ايضا الى تحويل بعض رموز مجموعة المحارف ASCII الى الترميز utf-8 وسنذكر ذلك لاحقا مع مثال مفصل .

مم سيتحول الرابط بعد التحويل الى utf-8 ؟

حسب بروتوكول RFC 3986 فان الرموز التي يجب ان يتكون منها الرابط المشفر بالترميز utf-8 يجب ان تكون مشتقه بشكل مباشر او غير مباشر من مجموعة المحارف ASCII , وما دون ذلك من رموز فلن يقبل بالمرة في عملية تكوين الرابط المشفر .

ما هي مجموعة المحارف ASCII ؟

American Standard Code for Information Interchange وهي مختصرة في الحروف ASCII ، تلفظ عادة آسكي ، هي مجموعة رموز ونظام ترميز مبني على الألف باء اللاتينية بالشكل الذي تستخدم به في الإنجليزية الحديثة ولغات غرب أوروبية اخرى.
من أكثر الإستخدامات شيوعا للنصوص المكتوبة باللآسكي تشتمل على إستخدامها في أنظمة الحاسوب، كما تستخدم في أجهزة الإتصالات وأنظمة التحكم التي تتعامل مع نصوص .

مجموعة الرموز المباشرة المشتقه من ASCII :

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~

مجموعة الرموز الغير مباشرة المشتقه من ASCII :

! * ' ( ) ; : @ & = + $ , / ? % # [ ]

ما الفائدة من تحويل الروابط الى الترميز utf-8 ؟

  1. وهو الاهم ويتمثل في اعطاء المستخدم او صاحب الموقع الثقة العمياء من قبل محركات البحث في حال كان الرابط باللغة العربية وقمت بتحويله الى الترميز utf-8 .
  2. الدعم الكامل لجميع التطبيقات او البرمجيات التي لا تدعم الا الترميز utf-8 وعندها سوف يصبح الرابط او النص الذي قمت بتحويله الى نص عالمي مقروء ومفهوم ومعرف في هذه التطبيقات , الأمر يشبه ترجمة لغة معينة غير مشهورة الى لغة عالمية معتدمة من قبل الكثير من الدول الكبرى .
  3. في بعض الاحيان نحتاج لتحويل بعض رموز مجموعة المحارف ASCII نفسها الى الترميز utf-8 لكي يتوافق مع متطلبات الرابط … مثال :

نفرض الرابط التالي :

http://en.wikipedia.org/wiki/Percent-encoding

رابط جميل اليس كذلك ؟؟ ولكن ماذا لو اراد مدير الموقع اضافة العلامة سلاش / داخل الرابط العنوان نفسه ؟؟ ماذا لو قمنا بادخال / ولكن غير مشفر ؟؟ سيصبح الرابط كالتالي :

http://en.wikipedia.org/wiki/URL-/Percent-encoding

هل تعتقد باننا لو دخلنا لهذه الرابط سيقوم الموقع باعطانا النتيجة بشكل صحيح ؟؟ انا لا اعتقد هذا الامر لان / تعني حسب بروتوكول HTTP الانتقال الى مجلد آخر داخل الموقع ولذلك فان الموقع سيعطينا بالضرورة خطأ 404 .. اذن ما الحل ؟هنا يأتي دور تحويل الرمز / الى الترميز utf-8 وهذا ما اعنيه بمتطلبات الرابط … سيكون الرابط بعد تحويل الرمز / كالتالي :

http://en.wikipedia.org/wiki/URL-%2FPercent-encoding

وهنا لاحظ القيمة 2F% وهي الصيغة المشفرة من الرمز / حسب ترميز utf-8 الرائع !!

اعتقد انكم مللتم من الكلام النظري … وتريدون مشاهدة وتجربة المثال بأنفسكم … حسنا لكم ذلك من خلال اداة تشفير الروابط وتحويلها الى الترميز utf-8 – اضغط هنا لدخول المثال.

السلام عليكم اخواني .

للكاتب EbNCaNa

  • Share/Bookmark

التعليقات (28) على ”تشفير الروابط والنصوص بواسطة الترميز UTF-8“

  1. شرح موفق اخي EbNCaNa ….. شكراً لك

  2. SomeOne

    شكراً لـك .

  3. العفو اخواني RedMan و SomeOne على ردودكم المشجعة … ان شاء الله بنضل عند حسن الظن .

  4. السلام عليكم

    شكراً لـك ..

  5. مقاله رائعه
    ولكن ماذا ينبغى علينا فعله لجعل سكريبتاتنا الخاصه بروابط عربيه
    علماً بأن السكريبت بترميز UTF-8
    هل بطباعة الرابط بالعربيه سيكون صديقاً لمحركات البحث وستقرأه صحيحاً أم هناك خطوات أخرى يجب عملها

    مثال :
    http://www.site.com/softs/جرافيك
    هل يلزم شىء آخر غير طباعة الروابط هكذا !!

    تحيتى وشكرى لك مره أخرى

  6. لا اخوي … بآخر المقال في صفحة للمثال عن كيفية تشفير الروابط … وهذا رابط الصفحة :

    http://www.almashroo.com/wp-content/uploads/2008/06/utf8-urls.html

    عندما تدخلها يوجد مكان لكتابة النص بالعربي وبعد الضغط على تشفير سترى كيف يجب ان يكون الرابط … وبعد ما تكتشف الطريقة تستطيع استعمال الدالة المستعملة بالملف وتمرير النصوص اليها لكي تقوم بالتشفير .

    شكرا على مرورك .

  7. شرح رائع وأخيرا عرفت معني الترميز UTF-8
    أضن أنكم تستعملونه في موقعكم الرائع
    —————– تشفير-الروابط-والنصوص-بواسطة-الترميز-utf ————-

  8. بارك الله فيك حبيبى ,
    هل يمكننى الحصول على تلك الداله لإستخدامها مباشرةً فى السكريبتات التى أقوم برمجتها !!
    وجزاكم الله كل الخير وكل عام وأنتم بخير

  9. اخوي jskk شكرا على مرورك الجميل ونعم فان نظام موقع المشروع من ووردبرس يحوي هذه الخاصية .

    اخوي عاشق الصداقة انا حاليا بصدد تحويل هذه الاداة الى برمجية صغيرة يستطيع تركيبها اي شخص لكي يستعملها فيه موقعه .

    الى الامام .

  10. السلام عليكم.
    شكرا لك اخى على الطرح الأكثر من رائع.
    الأداة التى وضعت رابطها اكثر من رائعة.

    لكن بالطبع من سيقوم بتطبيق هذا الأمر على الروابط سيكون هذا التطبيق على موقع ديناميكى وليس صفحات HTML

    وهذا مثال على التطبيق فى الـ php بطريقة تقوم بتنظيف الروابط بشكل جيد وبعدها تحويلها لروابط صالحة الإستخدام

    [code]
    $bad_entites = array("\"", "-", "'", "\\", "/", "&", "", "[", "}", "[","]", "quot;","_", "!", "@", "#", '$',",",'%', '^', '*', '(', ')', ';', ':','`', '~','=', '|');
    $url = 'http://www.example.com/اسم عنوان الموضوع الذى به رموز غير مقبولة 'مثل " او @ مثلا او حتى به مسافات كثيرة
    $url = str_replace($bad_entites, "", $url);
    $url = preg_replace('/[ \t\r\n] /', " ", $url);
    $$url = str_replace(" ", "_", trim(mb_strtolower($url, "utf-8")));
    $url = urlencode($url);
    [/code]

    بعد تمرير الرابط بهذه الدوال سيخرج بالشكل التالى (بالمتصفحات التى تعرض الحروف بشكلها الصحيح)
    http://www.example.com/اسم_عنوان_الموضوع_الذى_به_رموز_غير_مقبولة_مثل_اومثلا_او_حتى_به_مسافات_كثيرة
    اليست هذه نتيجة رائعة؟

    اكرر شكرى لكاتب الموضوع واتمنى اكون اضفت شئ ولو بسيط من الإفادة
    (واتمنى تعديل التعليق اذا كان وسم الكود خاطئ

  11. اخوي الدعم العربي بارك الله فيك على تشجيعك الرائع وكلامك الاروع … وكلامك مزبوط … يعني الاداة التي وضعتها هي اساس فقط وممكن تطويرها للعمل في بيئة تطبيقية لأي مبرمج بحب يستعمل طريقة الترميز باليونيكود …

    بخصوص الكود الذي وضعته ممتاز لكن اخوي جميع الرموز الغير مرغوب فيها رح يقوم البرنامج بتشفيرها وبتقدر تخزنها مشفرة وهيك ما بكون في خطر على امن الموقع لانو احيانا قسم من الرموز التي وضعتها ضمن الغير مرغوب فيها تكون ضرورية لتكوين عنوان مناسب لموضوع معين … بشكل عام الكود فيها بعض الاخطاء سأقوم بتصحيحها لاحقا ان شاء الله …

    حاليا مضغوط بشوية اشغال لكن بس انتهي رح اطور برمجية صغيرة قابلة للدمج مع اي برنامج ادارة محتوى لكي يستفيد الجميع منها ورح يكون التشفير بشكل تلقائي وبكل سهولة ان شاء الله وهذا جواب ايضا لاخوي عاشق الصداقه .

    اتمنى ان تشاركنا اخي بجميع المواضيع التي نطرحها مستقبلا .

    الى الامام حبيبي

  12. العفو اخى الكريم. وشاكر لك تعليقك الطيب.
    واعلم ان بعض الرموز التى حجبتها ربما تكون ضرورية عند البعض.
    وعند البعض الأخر (امثالى الذى لا يحبذوا فكرة ظهور الرموز بالعناوين) فهى مرغوب بها.

    وبالنسبة للأخطاء الموجودة بالكود فالمعزرة لأنى كتبته وانا على عجلة من امرى.

    على كل حال لقد قمت بتنسيق الكود داخل دالة بحيث تمرر بها عنوان الموضوع فيرد لك نظيف وصالح للإستخدام
    (واكرر مرة اخرى للأخوة المشرفين, انا لست متأكد من الوسم الصحيح المطلوب كتابة الكود داخله, فـ برجاء تعديل التعليق ووضعه بالشكل السليم.)

    [php]
    function clean_url($url_name){
    $bad_entites = array(”\”", “-”, “‘”, “\\”, “/”, “&”, “”, “{”, “}”, “[","]“, “quot;”,”_”, “!”, “@”, “#”, ‘$’,”,”,’%', ‘^’, ‘*’, ‘(’, ‘)’, ‘;’, ‘:’,'`’, ‘~’,'=’, ‘|’);
    $url_name = str_replace($bad_entites, “”, $url_name);
    $url_name = preg_replace(’/[ \t\r\n]+/’, ” “,$url_name);
    $url_name = str_replace(” “, “_”, trim(mb_strtolower($url_name, “utf-8″)));
    $url_name = urlencode($url_name);
    return $url_name;
    }[/php]

    وهذا رابط به الدالة لمن احب استخدامها ووجد صعوبة فى نسخها
    http://www.dd4bb.com/clean_url.txt

  13. ابدعت اخوي … الدالة ممتازة وشغالة تمام … وعند هالنقطة اعتقد يمكن الاستغناء عن دالة الجافا التي وضعتها بنفسي … يمكن اختصار كل ما وضعته من جافا بكم سطر php واعتقد الشي الذي جعل دالتك تنجح هو وجود الدالة mb_strtolower بترميز utf-8 والا فلن يكون لها نفع … شي رائع بحق .

    فقط اخوي لو تعدل ” _ ” وتضح بدلها ” – ” لانها المعتمدة من قبل جوجل وجميع المواقع التي تستعمل هذه الخاصية .

    ملاحظة للاخوة : الدالة urldecode تقوم بفك تشفير الدالة التي وضعها اخونا الدعم العربي وهكذا فان دمج هذه الدالة مع اي نظام ادارة محتوى سوف يجعل من الموقع صديق حميم لمواقع البحث على رأسهم جوجل .

    الى الامام حبيبي

  14. العفو اخى الكريم.
    وشاكر لك جدا تعليقك الأكثر من رائع وشجعنى كثيرا.
    وبالنسبة لإقتراحك فهو يمكن تنفيذه بسهولة بإستبدال الـ “_” بـ “-”
    من السطر
    $url_name = str_replace(” “, “_”, trim(mb_strtolower($url_name, “utf-8″)));

    لكن كامعلومة تضعها برصيدك وصدقنى عن خبرة كبيرة فى عالم محركات البحث
    فأنا قبل شروعى فى تعلم البرمجة قد (والله اعلم هذا مايقال عنى) احترفت التعامل مع محركات البحث. (واكرر انا لا ادعى الإحتراف, لأن عن خبرة ايضا اغلب من يدعوا الإحتراف يكونوا فشلة وليس بهم الا غرور)

    ويمكن هذا كان من الأسباب الرئيسية التى شجعتنى للتعمق شيئا بشئ فى الـ php

    لا يوجد فرق بين الـ – والـ _ ولا بالحروف الكبيرة والصغيرة. فإذا نظرت على
    اشهر انظمة الويكى مثلا, سترى انها لا تستخدم هذا ولا ذاك, لكنها تستخدم “:” اليس هذا صحيح؟

    المهم فى موضوعنا هنا, ان تكون الكلمات نفسها هى التى تعرض بشكل سليم
    لأنها هى ماستفيد كاكلمات مفتاحية اضافية بجانب محتوى الصفحة وعنوانها.
    ولا يهم مسألة الـ – او الـ _ او حتى المسافة البيضاء! لكن المسافة ستكون لها شكل غير لطيف بعد ان قمنا بتنظيف الروابط بهذا الشكل.

    ومرة اخرى احيى فيك روحك الطيبة يا طيب.
    واتمنى ان اكون ضيف خفيف معكم.

  15. بارك الله فيكم وأعزكم : الدعم العربى & EbNCaNa
    كنت أحتاج مثل هذه الداله جداً فجزاكم الله كل الخير وزادكم علماً ونفع بكم الإسلام والمسلمين .

    فى نقاشكم الجميل تعرضتم لنقطه عليها إختلاف كبير الا وهى مصادقة محركات البحث والـ (- & _) …
    لست خبيراً فى محركات البحث بالقدر الكبير ولكن لى خبره معقوله فى هذا الشأن بفضل الله وبقراءة موضوعاتكم اساتذتى فى هذا الشأن وبالتجارب الشخصيه أيضاً
    فعلاً الكثيرون يفضلون الـ (-) فى محركات البحث ، ولعل هذا واضحاً فى هاك (vbseo) مثلاً
    لكن عن تجربه شخصيه أيضاً ، فقبل علمى بهذا الأمر وبعد برمجتى لسكريبت مكتبة البرامج Web Download كان عليّ تجربتها على موقعى قبل طرحها وقد راعيت فيها بعض ما تفضله محركات البحث (على قدر علمى فى وقتها) وقد إستخدمت فى كتابتى للروابط العلامه (_) وليس (-) هذا لجهلى بالأصلح لمحركات البحث ..
    ولكننى تأكدت أيضاً أن هذا ليس له علاقه بأفضلية ظهور نتائج البحث ولا حتى بترتيب البيج رانك
    فمثلا : هذا رابط لبرنامج الفوتوشوب لدى مكتبة البرامج بموقعى :
    http://download.yallagroup.net/graphic/Adobe_Photoshop_CS2_ME.html
    وهذا رابط للإصدار الأخير :
    http://download.yallagroup.net/graphic/Photosopcs3_me.html
    ولو لاحظتم ستجدون أننى قد إستخدمت العلامه التى يقال أنها غير مرغوبه ورغم ذلك فالرابطين المذكورين لهما أفضليه كبرى فى الظهور ضمن نتائج البحث والحمد لله (وحدث هذا فى وقت لا يتعدى شهرين)
    زيادةً على ذلك فكل رابط منهم يحمل ترتيب جوجل (بيج رانك 2) وهذا ترتيب ممتاز لصفحة برنامج :)

    لكن على كل حال .. طالما أن الأغلبيه ترى أن الأفضليه لـ (-) وطالما ليس هناك ضرر من إستخدامها ، فأنا أستخدم الأن (-) فى برمجياتى ، خاصةً لأننى أثق فى (vbseo) وما أثق به أكثر هو (Wordpress) والإثنان يستخدمان العلامه (-) !!!

    أعلم أننى إبتعدت عن مجال الموضوع الأصلى .. ولكنى أردت ذكر ما لدى فى هذا الأمر ليس أكثر وآسف على الإطاله ، ولكن يسعدنى الحديث معكم :)

    أخى EbNCaNa : هل هذه الداله كافيه لأن تكون روابطى كلها باللغه العربيه !!
    أم أن هناك إضافة أخرى يجب أن أستخدمها معها !!

  16. مشكور اخوي عاشق الصداقة على ردك وتفاعلك مع الموضوع … بخصوص سؤالك فالجواب هو نعم … يمكنك استعمال هذه الدالة بتشفير النص قبل دخوله لقاعدة البيانات … ولا داعي لان تعمل حقل خاص يحتوي عنوان الموضوع المشفر … فقط عندما تريد الاستعلام عن اي موضوع تقوم بالاستعلام بواسطة عنوان الموضوع وليس عن طريق رقم الموضوع كما جرت العادة .

    باختصار في صفحة الاقسام وعند عرض المواضيع … بدل ان تقوم بوضع الارقام كدلالة للموضوع تقوم بتشفير عنوان كل موضوع وتضعه بدل الرقم … وفي صفحة عرض الموضوع تقوم بفك تشفير النص الذي جلب من المتصفح وتستعلم عنه من قاعدة البيانات وهكذا سيظهر الموضوع بشكل عادي … يجب ان تعرف طريقة تشفير وفك تشفير الروابط والتي سبق وذكرت في هذا الموضوع .

    الى الامام حبيبي .

  17. بارك الله فيك وأعزك حبيبى إبن قانا
    شكراً لمتابعتك ردى والإهتمام الكبير
    أفهمك جيداً وقد إتضح الأمر كله والحمد لله

    لا يسعنى الا ان أدعو لك أن يزيدك الله من علمه ويدخلك فسيح جناته ويفرحك بما تفيد الناس به حين تلقاه
    تحيتى وحبى :)

  18. باك الله فيكم مجموعه عربيه مميزه في شروحاتها
    شكرا لكم على الشرح و وفقكم الله

  19. أخواني الأعزاء هل بالأمكان إستخدام هذه الدارلة في سكربت خاص ليس منتدى
    مثلاً عندي سكربت خاص فيه مثل عمل هاك vbseo للأرشفة ولكن الروابط باللغة العربية تظهر ــــــــــــــــــــــ بدل الكلمات العربية هل هناك حل لتضهر كلمات عربية بدل السطر حيث بهذه الطريقة الأرشفة تكون خاطئة ويعطيني رابط غير المرغوب به
    مثال
    http://www.tunisianhr.com/alshihab/list/location/____jobs.html

  20. اشكرك جواهر على مرورك الكريم نتمنا متابعتنا دائما .

    اخي الشهاب نعم يمكنك استعمال هذه الدالة في موقعك واعتقد سبب ظهور الرابط بهذا الشكل هو استعمال اللغة العربية في الرابط بدون تشفير وهذا يسبب مشكلة في متصفحات معينة والحل اكيد في هذه الدالة فقم بتشفير النص ثم ارسله للتصفح وعند الاستعلام قد بفك التشفير .

    الى الامام اخوي

أضف تعليقك




يمكنك استخدام الوسوم التالية في التعليق: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


* حقول مطلوبة