طريقة الاستخدام
- الصق السلسلة التي تريد فحصها في حقل المدخلات.
- اقرأ النتيجة: صالحة أو غير صالحة، والنوع المكتشف (قياسي أو آمن لعناوين URL)، والحجم بعد فك الترميز.
- إذا ظهرت قائمة بالمشكلات، فاستعن بالمواضع المذكورة لتحديد الأحرف غير الصالحة أو المسافات البيضاء أو الحشو الواقع في غير موضعه.
- انظر إلى نوع المحتوى المكتشف لمعرفة ما إذا كانت البيانات نصًا أو ملفًا مثل PNG أو PDF أو ZIP.
ما الذي يجعل Base64 صالحًا
- الأبجدية. لا يُسمح إلا بالأحرف
A-Zوa-zو0-9وحرفين إضافيين:+و/في Base64 القياسي، و-و_في Base64URL. والسلسلة التي تخلط بين الزوجين تكون في الغالب تالفة أو مجمّعة من مصدرين. - الحشو. لا يجوز أن تظهر علامة
=إلا في النهاية، ومرتين على الأكثر. ووجود الحشو في المنتصف يعني عادةً أن قيمتين مرمّزتين دُمجتا معًا. - الطول. مع الحشو، يكون الطول من مضاعفات 4. وبدون الحشو، يصلح أي طول باستثناء 4n + 1: فالحرف المتبقي الواحد لا يحمل إلا 6 بت، وهذا لا يكفي لتكوين بايت.
وتضيف أدوات فك الترميز الصارمة قاعدة أخرى: يجب أن تكون البتات الدنيا غير المستخدمة في الحرف الأخير أصفارًا. وتتجاهل كثير من أدوات فك الترميز هذه البتات، لكن بعضها، مثل base64.StdEncoding.Strict() في Go، يرفض السلسلة.
الأخطاء الشائعة وطريقة إصلاحها
| المشكلة | السبب المعتاد | الحل |
|---|---|---|
| حرف غير صالح | علامات اقتباس أو شرطات مائلة عكسية أو رموز %2B و%3D نُسخت مع القيمة | احذف الأحرف الزائدة أو فك ترميز URL أولًا |
| مسافات في المنتصف | تحوّلت علامات + إلى مسافات عند مرور القيمة عبر عنوان URL أو نموذج | أعِد علامات +، أو استخدم Base64URL لعناوين URL |
| طول يساوي 4n + 1 | قيمة مقتطعة بسبب حد لعرض العمود أو سطر سجل أو نسخ جزئي | انسخ القيمة كاملة مرة أخرى |
| حشو في المنتصف | سلسلتا Base64 مدموجتان معًا | افصلهما وفك ترميز كل جزء على حدة |
| فواصل أسطر | التفاف الأسطر وفق MIME أو PEM | غير ضارة عادةً؛ احذفها حيث يُشترط سطر واحد |
الصلاحية لا تعني أن للبيانات معنى
لا يحتوي Base64 على ترويسة ولا على مجموع اختباري، لذا فالصلاحية تعني فقط أن السلسلة قابلة لفك الترميز. وكثير من الكلمات العادية تجتاز الفحص: فأي أربعة أحرف لاتينية تشكّل مجموعة صالحة. ولهذا تفك الأداة ترميز البيانات أيضًا وتعرض حجمها ونوع محتواها. فالنص المقروء أو توقيع ملف معروف مثل PNG أو PDF أو ZIP دليل جيد على أن السلسلة بصيغة Base64 فعلًا؛ أما حفنة من البايتات العشوائية فليست كذلك. ولاختبار ترميزات أخرى أيضًا، جرّب أداة اكتشاف الترميز.
التحقق من Base64 في الشيفرة البرمجية
// JavaScript: Base64 قياسي مع الحشو (يطابق السلسلة الفارغة أيضًا)
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/
# Python: إطلاق خطأ بدلًا من تخطي الأحرف غير الصالحة
import base64, binascii
try:
base64.b64decode(s, validate=True)
except binascii.Error:
print('invalid')
الأسئلة الشائعة
لماذا تُعدّ كلمة عادية سلسلة Base64 صالحة؟
test مثلًا يُفك ترميزها إلى ثلاثة بايتات. تحقّق من نوع المحتوى المكتشف: إذا لم تكن النتيجة نصًا مقروءًا ولا نوع ملف معروفًا، فالأرجح أن المدخلات لم تكن Base64 أصلًا.هل يكون Base64 الذي يحتوي على مسافات أو فواصل أسطر صالحًا؟
يلفّ MIME وPEM سلاسل Base64 في أسطر، وتتخطى معظم أدوات فك الترميز المسافات البيضاء. لكن حقول JSON وترويسات HTTP وJWT وdata URI تتوقع سلسلة واحدة متصلة. لذلك تعرض الأداة المسافات البيضاء بشكل منفصل لتقرّر ما إذا كانت مهمة في الموضع الذي ستُستخدم فيه السلسلة.
هل يكون Base64 بدون حشو = صالحًا؟
= حتى يصبح الطول من مضاعفات 4. أما السلاسل غير المحشوة التي يبلغ طولها 4n + 1 حرفًا فليست صالحة أبدًا.كيف أتحقق في JavaScript مما إذا كانت السلسلة بصيغة Base64؟
atob() داخل try/catch. لاحظ أن atob() تُطلق الخطأ InvalidCharacterError عند المدخلات غير الصالحة، لكنها تقبل بصمت المسافات البيضاء والحشو الناقص، ولا تقبل الأحرف الآمنة لعناوين URL.