khaled-alshamaa / ar-php

Set of functionalities enable Arabic website developers to serve professional search, present and process Arabic content in PHP

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

حرف لا يظهر كما يجرب

evil1morty opened this issue · comments

commented

مرحبا,
عند استعمال فنكشن utf8Glyphs
كلمة "نتائج" تضهر كما في الصورة : https://i.imgur.com/VdezfNc.png

يظهر *
هلا شاركت الكود أو العنوان الأصلي؟
تبدو صحيحة عند نشرها على تويتر للتجريب ؟!
image

commented

مرحبا, شكرا على الرد
الصورة التي قمت انت بنشرها لا تحتوي على نص تم انشاؤه بواسطة مكتبة ar-php
هذا هو النص "بعد ضجة نتائج مباراة ولوج مهنة المحاماة..مغاربة غاضبون من المحسوبية والزبونية"
الإصدار الذي استعمله هو 6.3.1
الكود الذي استعمله:

$glyphs = new \ArPHP\I18N\Arabic();
$result = $glyphs->utf8Glyphs($text, 50, false);

ثم أقوم باضافة النص من النتيجة الى الصورة بإستعمال مكتبة التلاعب بالصور Intervention Image

commented

النص التالي : الضريبة على السيارات بالمغرب “لافيينيت”.. تحديد آخر أجل للأداء
النتيجة : https://pbs.twimg.com/media/FlXYDRmX0AIgna4?format=jpg&name=small
النص التالي : الإعلام الفرنسي “يتلاعب” بتصريحات تبّون للإساءة إلى المغرب
النتيجة : https://pbs.twimg.com/media/FlfdF2zWAAExuCT?format=jpg&name=medium
النص التالي : بعد ضجة نتائج مباراة ولوج مهنة المحاماة..مغاربة غاضبون من المحسوبية والزبونية
النتيجة : https://pbs.twimg.com/media/Flo7bsKWQAI1Atn?format=jpg&name=small
النص التالي : كأس العالم للأندية بالمغرب.. ريال مدريد يتقدم بطلب
النتيجة : https://pbs.twimg.com/media/FltXsfpWQAMeWZ0?format=jpg&name=medium
النص التالي : الركراكي يستعد لإعادة هؤلاء اللاعبين للمنتخب
النتيجة : https://pbs.twimg.com/media/FluzBavXEAA6a9Q?format=jpg&name=medium
النص التالي : مركز التجاري للأبحاث يكشف توقعاته بخصوص زوج العملات الدولار/الدرهم
النتيجة : https://pbs.twimg.com/media/FlwsjxtWYAE92qu?format=jpg&name=small

@khaled-alshamaa
Seems that there is an issue in the conversion, I tried generating the same title using PHP GD functions and got the same result.

<?php

//echo 1;
//exit;
header("Content-type: image/png");

//echo 2;
$im = imagecreatefrompng('bg.png');

    // Create some colors
    $black = imagecolorallocate($im, 0, 0, 0);
    $blue = imagecolorallocate($im, 0, 0, 255);
    $white = imagecolorallocate($im, 255, 255, 255);

    // Replace by your own font full path and name
    $path = substr(
        $_SERVER['SCRIPT_FILENAME'], 0, 
        strrpos($_SERVER['SCRIPT_FILENAME'], '/')
    );
    $font = './Amiri-Regular.ttf';
	
	//echo $font;

    // UTF-8 charset
    $text = 'الضريبة على السيارات بالمغرب “لافيينيت”.. تحديد آخر أجل للأداء';
    imagefill($im, 0, 0, $white);
    imagettftext($im, 20, 0, 10, 50, $blue, $font, 'UTF-8:');
    imagettftext($im, 20, 0, 250, 50, $black, $font, $text);

    /*
      // Autoload files using Composer autoload
      require_once __DIR__ . '/../vendor/autoload.php';
    */

	//echo $path;
    require './src/Arabic.php';
	//var_dump(file_exists($path.'/src/Arabic.php')) ;
	//var_dump(file_exists('src/Arabic.php')) ;
    $Arabic = new \ArPHP\I18N\Arabic();

    $text = 'الضريبة على السيارات بالمغرب “لافيينيت”.. تحديد آخر أجل للأداء';
    $text = $Arabic->utf8Glyphs($text);


    imagettftext($im, 20, 0, 10, 100, $blue, $font, 'Arabic Glyphs:');
    imagettftext($im, 20, 0, 250, 100, $black, $font, $text);

    // Using imagepng() results in clearer text compared with imagejpeg()
    imagepng($im);
    imagedestroy($im);

image

@fakiri25
لقد تم إعلام اﻷخ خالد بالمشكلة
السلام عليكم

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

بداية يجب الإشارة إلى أن هذه المشكلة المعروضة هنا هي مشكلة مركبة تتألف من مشكلتين مختلفتين، بداية ما يخص كلمة نتائج فإن التحقق بالأمثلة التي عرضها @fakiri25 تظهر حرفا غريبا حين نسخ الكلمة إلى برنامج notepad حيث يظهر حرف ياء تعلوه همزة لذلك فهي تختلف كرمز UTF-8 عن محرف الهمزة على نبرة الموجود ضمن جدول Arabic Presentation Forms-B.

utf-8

من جهة أخرى، فالمشكلة الأخرى والتي هي أكثر جدية فتظهر حينما يأتي حرف الألف (سواء المهموز أو غير المهموز) بعد حرفي لام. على سبيل المثال كلمات مثل اللانهاية، للآجال، للأقدار، للإنذار، الخ..

شكرا جزيلا على كلا التنبيهين، جاري العمل على فحص الشيفرة البرمجية وتبيان الطريقة المثلى لحل هاتين المشكلتين بأسرع وقت ممكن، على أن يتم إطلاق إصدار لترقيع المشكلة 6.3.2 في أقرب فرصة ممكنة.

كل الشكر للصديق @fakiri25 على اكتشاف هذه المشكلة، والشكر موصول للأخ @muotaz على تقصيها بتعمق أكبر مما ساعدني على معرفة أصل المشكلة وحلها (أتحدث هنا عن الخطأ الذي كان يظهر عندما يأتي حرف الألف بعد حرفي لام).

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

الشكر موصول لك اخي خالد على جهودك
أستاذنا الكبير انت

تم إطلاق الإصدار التصحيحي 6.3.2 منذ قليل، لكن تبقت للأخ السائل @evil1morty نقطة أخيرة لم يتم حلها، وهي تلك التي تتعلق بالمشكلة التي تظهر عند كتابة كلمة نتائج. في الحقيقة وبعد التدقيق وجدت كما أشرت سابقا أن أصل المشكلة هو في طريقة إدخال النص الذي تتم معالجته، حيث أنها كانت ياء تلتها همزة عليها (https://unicode-table.com/en/0654) بصيغة غير شائعة على الإطلاق، وذلك بدلا عن محرف الهمزة على نبرة المعتاد (https://unicode-table.com/en/0626).

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

$text = preg_replace('/\x{064A}\x{0654}/u', 'ئ', $text);