اذهب إلى المحتوى

السؤال

نشر

شباب عندي textarea في موقعي المفروض بيتم إستخدام emojis فيها.

ف في قاعدة بيانات mysql عملت ترميز الداتابيز والجدول utf8mb4_unicode_ci وتم تخزينهم بشكل صحيح في الداتا بيز من غير أي مشاكل.

المشكلة كانت عندي في عرض الemojis من الداتا بيز.. بعد ما عرضتها في صفحتي ظهرت على هيئة علامات إستفهام ؟؟؟

بستخدم في موقعي PDO وعملت في الخيارات

PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"

وصفحة الموقع شغالة بutf-8 بس برضو المشكلة متحلتش.

المهم لقيت حل على stackoverflow بإني أخزنهم ب base64_encode وأعرضهم ب base64_decode والطريقة نجحت فعلا واشتغلت

السؤال بقا هل الbase64 هيفرق في الآداء أو التخزين ولا لا أو هل فيه حل تاني؟ وشكرا💛

Recommended Posts

  • 0
نشر

مرحباً @محمود رضا موسى،
يتم استخدام Base64 بشكل شائع لترميز البيانات الثنائية (على سبيل المثال ، الصور أو ملفات الصوت) للتضمين في HTML و CSS والمستندات النصية الأخرى. بالإضافة إلى ذلك ، يتم استخدام Base64 لتشفير البيانات التي قد تكون غير مدعومة أو تالفة أثناء النقل أو التخزين أو الإخراج.


ولكن لسوء الحظ، على الرغم من أن Base64 طريقة فعالة نسبيًا لتشفير البيانات الثنائية ، إلا أنها ستزيد في المتوسط حجم الملف لأكثر من 25٪. لا يؤدي هذا إلى زيادة النطاق Bandwidth فحسب ، بل يؤدي أيضًا إلى زيادة وقت تحميل الملفات.
ولكن بما أنك تستخدمها فقط لأيقونات صغيرة الحجم نسبياً فذلك لن يسبب لك أي مشكلة، ولن تشعر بفارق كبير. كما وأن العديد من المواقع تستخدم حالياً Base64 أثناء التعامل مع Emojis
أرفق لك أيضاً صورة توضيحية للمقارنة بين حجم نفس الصورة مع وبدون الترميز لتوضيح الفكرة.

بالتوفيق

base64-image-size-comparison-1.jpg

  • 0
نشر

مرحبا عزيزي محمود

الوقت المستغرق في الترميز نفسه ليس هو المشكلة حقًا.

يعد Base64 أكثر تعقيدًا ، لكن الترميز لن يظل عبئًا كبيرًا.

المشكلة الحقيقية هي الوقت المنقضي في نقل البيانات عبر الشبكة ، والذي يعتمد على الحجم المشفر للبيانات.

تقوم Base64 بتوسيع حجم البيانات مقارنة بالشكل الثنائي بمقدار الثلث. لذا سيكون حجم ملف 40 ميغابايت حوالي 53 ميغابايت.

يضاعف Hex encoding حجم البيانات ، لذا سيكون حجم الملف 40 ميغابايت 80 ميغابايت.

لذلك باختصار Base64 هي الأفضل

تحياتي

  • 0
نشر

مرحباً محمود،

لقد أجبتك مُسبقاً على سؤالك في المساهمة الماضية، ينقصك النُقطة الرابعة التي ذكرتها هنا:

عمل set للترميز الخاص بالإتصال لهذا الترميز: utf8mb4 ظننت أنك تستخدم mysqli لكن بما أنك تستخدم pdo يُمكنك تغيير الترميز بهذا الشكل:

<?php

$conn = new PDO('mysql:host=your-hostname;dbname=your-db;charset=utf8mb4', 'your-username', 'your-password', array(
   PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
   PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
));

بالتوفيق.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...