هل استخدام Be64 لتشفر النص العربي قبل ارساله لقاعدة البيانات جيد لان php لا يرسل النص العربي
ام هناك طرق افضل و اكثر تقدما لاني استخدم حاليا Be64
ذلك غير فعال، Base64 هو عملية ترميز، وليس تشفير، ويزيد حجم البيانات بنسبة 33% تقريبًا، مما يؤثر على أداء قاعدة البيانات واستهلاك المساحة.
وأحيانًا تؤثر بعض الأحرف العربية على عملية الترميز/فك الترميز، مما يؤدي إلى فقدان البيانات أو ظهورها بشكل خاطئ.
الحل الأفضل والمستخدم من قبل الجميع، هو استخدام ترميز UTF-8 وهو ترميز عالمي، تفقد قاعدة البيانات والترميز المستخدم بها، حيث يتم إرسال البيانات من PHP وتخزينها في قاعدة البيانات وستظهر بشكل سليم عند التخزين والاسترجاع.
يمكنك ذلك من خلال تعديل إعدادات قاعدة البيانات في لوحة التحكم أو من خلال تنفيذ استعلام كالتالي:
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
استخدام Base64 لتشفير النصوص قبل إرسالها إلى قاعدة البيانات ليس الحل الأفضل و لكنه أحيانا قد يكون حلا مؤقتا لبعض الحالات. وتوجد طرق أفضل للتعامل مع النصوص العربية في PHP وقواعد البيانات.
حيث ان Base64 هو طريقة لترميز البيانات الثنائية إلى سلسلة من الأحرف للنقل عبر بروتوكولات مثل HTTP. لكنه لا يحل مشكلة ترميز النصوص نفسها. وعند إرسال النصوص العربية باستخدام Base64 يتم تحويل النص إلى شكل قابل للنقل ولكنه سيستهلك مساحة أكبر من النص الأصلي بسبب طريقة الترميز مما قد يؤثر على الأداء وحجم البيانات في قاعدة البيانات.
فمثلا
أهلا بالعالم
يتم تحويلها إلى النص التالي :
2KPZh9mE2Kcg2KjYp9mE2LnYp9mE2YU=
والحل الأفضل هو إستخدام ترميز UTF-8 حيث أنه ترميز عالمي يدعم جميع الحروف في اللغات المختلفة بما فيها اللغة العربية ومن الأفضل التعامل مع النصوص العربية باستخدامه.
لذلك تأكد من أن قاعدة البيانات الخاصة بك تدعم ترميز UTF-8 فالأمر التالي لإنشاء قاعدة بيانات تدعم utf8 :
CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
وعند إنشاء جدول يفضل جعل الأعمدة التي باللغة العربية تدعم utf8 :
CREATE TABLE my_table ( id INT AUTO_INCREMENT PRIMARY KEY, name_ar VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci );
وإذا كنت تستخدم PDO في PHP يجب الإتصال بقاعدة البيانات والسماح ب utf8 هكذا :
$pdo = new PDO( 'mysql:host=hostname;dbname=defaultDbName;charset=utf8mb4', 'username', 'password' );
التعليقات