لدي مشكله في موقع انشاء Qrcode يدعم اللغه العربيه

mohamed_program

السلام عليكم ورحمة الله لدي مشكله في موقعي لدي صفحه واحد تعرض بيانات رحله

المفترض ان يتم انشاء Qr code يحتوي علي جميع بيانات الرحله البيانات باللغه العربيه لذالك تحدث مشكله

Could not encode content to ISO-8859-1

هذه هي المشكله الاولي

ثاني مشكله هي عندما البيانات تكون كبيره جدا واستطعت انشاء Qr code للاسف يكون معقد جدا ولا يتم قراتها ابدا مهما حاولت

اسم الباكج : composer require simplesoftwareio/simple-qrcode

الربط اللذي اود ان اجعل له qrCode هكذا :

كود الخاص بي

  public function playOrder(Request $request)

  {




    $x = $request->data;

    $dataarray = json_decode($x, true);

    $qrQode = QrCode::size(100)->generate("https://wealthest22.com/quiz_app_taha/public/s/" . $x);

    return view('index', ["data" => $dataarray, "qrQode" => $qrQode]);

  }

التقنيات

laravel , php ,html,css,js

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

وعليكم السلام , الحل بسيط

بنسبه للمشكله الاولي وهي اللغه العربيه يجب اولا عمل json_decode للبيانات

قبل انشاء Qr code

بهذه الطريقه

     $x = $request->data;
     $dataarray = json_decode($x, true);

بنسبه للمشكله الثانيه اذا كانت البيانات كبيره بالفعل لن يتم قراءة الباركود وهنا لا يوجد الا حل واحد فقط هو محاولة اختصار هذه الرابط بالبيانات الخاصه به الي رابط بسيط ولان هذه المشكله قد وجهتني واستطعت حلها 100% ساطرح عليك الحل النهائي لها

اولا سنقسم الرابط الي جزئين الرابط الاصلي وهو https://wealthest22.com/qui...

والبيانات التي تريد عمل عليها باركود

وسيتم انشاء جدول يحتوي علي حقلين بهذه الطريقه

 public function up()
    {
        Schema::create('short_links', function (Blueprint $table) {
            $table->id();
            $table->longText('long_url');
            $table->string('code')->unique();
            $table->timestamps();
        });
    }

حقل long_url يمثل الرابط بالكامل بجميع بياناته

حقل ال code يمثل قيمه لا يمكن تكرارها

ثما سيتم انشاء model خاص بالجدول بهذه الطريقه

class ShortLink extends Model
{
    use HasFactory;
    protected $fillable = ['long_url', 'code'];
}

ثما سيتم تغير الداله الخاص بك لتصبح بهذه الشكل :

    public function playOrder(Request $request)
    {


        $input['long_url'] = "https://wealthest22.com/quiz_app_taha/public/play/order?data=" . ($request->data); // The long URL from your form or API call
        $input['code'] = str::random(6); // Generate a random string for the short code


        $shortLink = ShortLink::create($input);


        $x = $request->data;
        $dataarray = json_decode($x, true);
        $qrQode = QrCode::size(100)->generate("https://wealthest22.com/quiz_app_taha/public/s/" . $shortLink->code);
        return view('index', ["data" => $dataarray, "qrQode" => $qrQode]);
    }

عند بداية فتح الصفحه سيتم تخزين الرابط اللذي يحتوي علي بيانات كبيره وثما سيتم انشاء كود عشوائي لا يتكرر لهذه رابط

و عند انشاء Qrcode سيتم انشاءه للرمز اللذي لايتكرر من رابط لاخر بلاضافه الي رابط الموقع الاساسي

ولان عند قراءة Qr code سيتم اظهار الرابط بهذه الشكل :

"https://wealthest22.com/quiz_app_taha/public/s/wwwwwww"

اعتبارا ان wwwww هو الكود اللذي لايتكرر وعند مسح QrCode سيظهر هذه الرابط وعند الدخول اليه سننشئ داله بسيطه تعيد التوجيه الي الرابط الاساسي بهذه الطريقه

    public function shortenLinkRedirect($code)
    {
        $find = ShortLink::where('code', $code)->first();


        if ($find) {
            return redirect($find->long_url);
        }


        return abort(404);
    }

لا تنسي انشاء route الخاص به بهذه الطريقه

Route::get('/s/{code}', [NameController::class, 'shortenLinkRedirect'])->name('s');

شكرا فكرة انشاء روابط مختصره ذكيه جد و حلت لي المشكله

وعليكم السلام ورحمة الله و بركاته .

اولا هل يمكنك ان توضح لى ما هى المكتبة المستخدمة لانشاء ال QR code .

ثانيا المشكلة اللتى تواجهك عندما تكون البيانات كبيرة جدا ليس لها حل حيث انه يتم تشفير البيانات لتصبح QR code وكلما اصبحت البيانات كبيرة فيصعب تشفيرها ومن ثم اعادة فك التشفير .

ونصيحتى لك هو ان تستخدم قاعدة البيانات لحفظ تلك البيانات وثم انشاء ال QR code لعنوان الصفحة اللتى تحتوى على تلك البيانات لعرضها وهذا اسهل كثيرا و يجنبك كثيرا من المشاكل

عدلت البوست اقراءه من الاول

حسنا الخطأ هنا فى سطر إنشاء ال QRcode

    $qrQode = QrCode::size(100)->generate("https://wealthest22.com/quiz_app_taha/public/s/" . $x);

يمكنك استخدام الدالة urlencode لتلافى هذه المشكلة وهذا هو الحل

$qrQode = QrCode::size(100)->generate("https://wealthest22.com/quiz_app_taha/public/s/" .urlencode($x);

تأكد من أن بيانات الرحلة مشفرة باستخدام ترميز الحروف الصحيح وهو ترميز UTF-8 بدلاً من ISO-8859-1، لتعيين ترميز الحروف ونوع المحتوى الذي يتم إرجاعه من خلال الرأس (Header) في الاستجابة HTTP.

header('Content-Type: text/html; charset=utf-8');

بالإضافة إلى إمكانية تحويل البيانات إلى ترميز UTF-8 باستخدام دالة mb_convert_encoding، وإليك مثال من خلال مكتبة PHP QR Code:

require_once 'phpqrcode/qrlib.php';


$data = mb_convert_encoding($data, 'UTF-8');


QRcode::png($data, 'qrcode.png', 'L', 4, 2);

بخصوص البيانات الكبيرة، اعتمد على مكتبة QR Code متقدمة مثل BaconQrCode لإنشاء QR code متقدم يتعامل بشكل أفضل مع البيانات الكبيرة، كالتالي:

use BaconQrCode\Encoder\QrCode;

$qrCode = QrCode::encode('بيانات الرحلة', 'UTF-8');

echo '<img src="' . $qrCode->getDataUri() . '">';