الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

درس : كيفية الكتابة باللغة العربية على الصور

بدأه Abd Allatif في 6 نوفمبر 2012 · 24 رد · 7,927 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

تقدم مكتبة GD دوال و ادوات هامة للتعديل على الصور كإنشاء صور المصغرات او قص جزء من الصورة و تطبيق مجموعة من الفلاتر الجاهزة او الكتابة على الصورة ..الخ

المشكلة الاساسية للمبرمج العربي هي عدم دعم مكتبة GD للغة العربية فستكون الكتابة بشكل حروف مقطعة وليس كما يفترض ان تكون, فمثلا الكود التالي

<?php
header('Content-Type: image/png');
$image = imagecreatetruecolor(200, 75);
imagefill($image, 0, 0, 0xaaaaaa);
$text = 'العربية';
imagettftext($image, 25, 0, 20, 50, 0x000000, 'arial.ttf', $text);
imagepng($image);
?>

الناتج عن الكود السابق هو

post-268329-027433900 1352202309.txt

لكن يمكن الكتابة على الصورة السابقة بطريقة اخرى وبشكل سليم باستخدام "رموز اليونيكود" وذلك على الشكل التالي

<?php
header('Content-Type: image/png');
$image = imagecreatetruecolor(200, 75);
imagefill($image, 0, 0, 0xaaaaaa);
$text = 'ﺔﻴﺑﺮﻌﻟﺍ';
imagettftext($image, 25, 0, 20, 50, 0x000000, 'arial.ttf', $text);
imagepng($image);
?>

وينتج عن الكود السابق الصورة التالية :

post-268329-032659500 1352202327_thumb.p

في الكود السابق تم استبال كلمة "العربية" بـ "ﺔﻴﺑﺮﻌﻟﺍ"

كيف تم ذلك؟؟!! لكل وضعيات المحارف في اي لغة "رموز يونيكود" خاصة بها فمثلا حرف الياء يأتي بأربع وضعيات :

الأولى في اول الكلمة : يـ و رمزها "FEF3"

الثانية في وسط الكلمة : ـيـ و رمزها "FEF4"

الثالثة في اخر الكلمة : ـي ورمزها "FEF2"

الرابعة "معزولة أو مفردة" : ي ورمزها "FEF1"

للاطلاع على القائمة الكاملة لجميع محارف اللغة العربية :

http://en.wikipedia.org/wiki/Arabic_script_in_Unicode

فيلزم لكتابة كلمة "العربية" ان تكون الالف معزولة و اللام في اول الكلمة و العين في وسط الكلمة ثم الراء في اخر الكلمة ثم الباء في اول الكلمة ثم الياء في وسط الكلمة ثم التاء المربوطة في اخر الكلمة

ملاحظة : "اول الكلمة وسط الكلمة اخر الكلمة " لاتدل على الموقع الفعلي للحرف وانما على وضعه. :happy:

طبعا عملية تحويل كل كلمة الى هذا الشكل يدويا تأخد وقت طويل و في بعض الاماكن يلزم توليد الكلمة فوريا "سكربت لتصمميم لوغو أو كتابة الكلمة في صورة لاستخدامها في كابتشا"

لذلك يمكن استخدام الكود التالي الذي قمت ببرمجته

<?php
/**
 * word2uni
 * This code is a part of aCAPTCHA project, This copyright notice MUST stay intact for use
 * @package aCAPTCHA 
 * @author Abd Allatif Eymsh
 * @copyright (c) 2012
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 */
function word2uni($word)
{

	$new_word = array();
	$char_type = array();
	$isolated_chars = array('ا', 'د', 'ذ', 'أ', 'آ', 'ر', 'ؤ', 'ء', 'ز', 'و', 'ى', 'ة');

	$all_chars = array
		(
			'ا' => array(

				'middle'		=>   'ﺎ',

				'isolated'		=>   'ﺍ'
				),

			'ؤ' => array(

				'middle'		=>   'ﺅ',

				'isolated'		=>   'ﺆ'
				),
			'ء' => array(
				'middle'		=>   'ﺀ',
				'isolated'		=>   'ﺀ'
				),
			'أ' => array(

				'middle'		=>   'ﺄ',

				'isolated'		=>   'ﺃ'
				),
			'آ' => array(

				'middle'		=>   'ﺂ',

				'isolated'		=>   'ﺁ'
				),
			'ى' => array(

				'middle'		=>   'ﻰ',

				'isolated'		=>   'ﻯ'
				),
			'ب' => array(
				'beginning'		=>   'ﺑ',
				'middle'		=>   'ﺒ',
				'end'			=>   'ﺐ',
				'isolated'		=>   'ﺏ'
				),
			'ت' => array(
				'beginning'		=>   'ﺗ',
				'middle'		=>   'ﺘ',
				'end'			=>   'ﺖ',
				'isolated'		=>   'ﺕ'
				),
			'ث' => array(
				'beginning'		=>   'ﺛ',
				'middle'		=>   'ﺜ',
				'end'			=>   'ﺚ',
				'isolated'		=>   'ﺙ'
				),
			'ج' => array(
				'beginning'		=>   'ﺟ',
				'middle'		=>   'ﺠ',
				'end'			=>   'ﺞ',
				'isolated'		=>   'ﺝ'
				),
			'ح' => array(
				'beginning'		=>   'ﺣ',
				'middle'		=>   'ﺤ',
				'end'			=>   'ﺢ',
				'isolated'		=>   'ﺡ'
				),
			'خ' => array(
				'beginning'		=>   'ﺧ',
				'middle'		=>   'ﺨ',
				'end'			=>   'ﺦ',
				'isolated'		=>   'ﺥ'
				),
			'د' => array(
				'middle'		=>   'ﺪ',
				'isolated'		=>   'ﺩ'
				),
			'ذ' => array(
				'middle'		=>   'ﺬ',
				'isolated'		=>   'ﺫ'
				),
			'ر' => array(
				'middle'		=>   'ﺮ',
				'isolated'		=>   'ﺭ'
				),
			'ز' => array(
				'middle'		=>   'ﺰ',
				'isolated'		=>   'ﺯ'
				),
			'س' => array(
				'beginning'		=>   'ﺳ',
				'middle'		=>   'ﺴ',
				'end'			=>   'ﺲ',
				'isolated'		=>   'ﺱ'
				),
			'ش' => array(
				'beginning'		=>   'ﺷ',
				'middle'		=>   'ﺸ',
				'end'			=>   'ﺶ',
				'isolated'		=>   'ﺵ'
				),
			'ص' => array(
				'beginning'		=>   'ﺻ',
				'middle'		=>   'ﺼ',
				'end'			=>   'ﺺ',
				'isolated'		=>   'ﺹ'
				),
			'ض' => array(
				'beginning'		=>   'ﺿ',
				'middle'		=>   'ﻀ',
				'end'			=>   'ﺾ',
				'isolated'		=>   'ﺽ'
				),
			'ط' => array(
				'beginning'		=>   'ﻃ',
				'middle'		=>   'ﻄ',
				'end'			=>   'ﻂ',
				'isolated'		=>   'ﻁ'
				),
			'ظ' => array(
				'beginning'		=>   'ﻇ',
				'middle'		=>   'ﻈ',
				'end'			=>   'ﻆ',
				'isolated'		=>   'ﻅ'
				),
			'ع' => array(
				'beginning'		=>   'ﻋ',
				'middle'		=>   'ﻌ',
				'end'			=>   'ﻊ',
				'isolated'		=>   'ﻉ'
				),
			'غ' => array(
				'beginning'		=>   'ﻏ',
				'middle'		=>   'ﻐ',
				'end'			=>   'ﻎ',
				'isolated'		=>   'ﻍ'
				),
			'ف' => array(
				'beginning'		=>   'ﻓ',
				'middle'		=>   'ﻔ',
				'end'			=>   'ﻒ',
				'isolated'		=>   'ﻑ'
				),
			'ق' => array(
				'beginning'		=>   'ﻗ',
				'middle'		=>   'ﻘ',
				'end'			=>   'ﻖ',
				'isolated'		=>   'ﻕ'
				),
			'ك' => array(
				'beginning'		=>   'ﻛ',
				'middle'		=>   'ﻜ',
				'end'			=>   'ﻚ',
				'isolated'		=>   'ﻙ'
				),
			'ل' => array(
				'beginning'		=>   'ﻟ',
				'middle'		=>   'ﻠ',
				'end'			=>   'ﻞ',
				'isolated'		=>   'ﻝ'
				),
			'م' => array(
				'beginning'		=>   'ﻣ',
				'middle'		=>   'ﻤ',
				'end'			=>   'ﻢ',
				'isolated'		=>   'ﻡ'
				),
			'ن' => array(
				'beginning'		=>   'ﻧ',
				'middle'		=>   'ﻨ',
				'end'			=>   'ﻦ',
				'isolated'		=>   'ﻥ'
				),
			'ه' => array(
				'beginning'		=>   'ﻫ',
				'middle'		=>   'ﻬ',
				'end'			=>   'ﻪ',
				'isolated'		=>   'ﻩ'
				),
			'و' => array(
				'middle'		=>   'ﻮ',
				'isolated'		=>   'ﻭ'
				),
			'ي' => array(
				'beginning'		=>   'ﻳ',
				'middle'		=>   'ﻴ',
				'end'			=>   'ﻲ',
				'isolated'		=>   'ﻱ'
				),
			'ئ' => array(
				'beginning'		=>   'ﺋ',
				'middle'		=>   'ﺌ',
				'end'			=>   'ﺊ',
				'isolated'		=>   'ﺉ'
				),
			'ة' => array(
				'middle'		=>   'ﺔ',
				'isolated'		=>   'ﺓ'
				)
		);

	if(in_array($word[0].$word[1], $isolated_chars))
	{
		$new_word[] = $all_chars[$word[0].$word[1]]['isolated'];
		$char_type[] = 'not_normal';
	}
	else
	{
		$new_word[] = $all_chars[$word[0].$word[1]]['beginning'];
		$char_type[] = 'normal';
	}

	if(strlen($word) > 4)
	{
		if($char_type[0] == 'not_normal')

		{
			if(in_array($word[2].$word[3], $isolated_chars))
			{
				$new_word[] = $all_chars[$word[2].$word[3]]['isolated'];
				$char_type[] = 'not_normal';
			}
			else
			{

				$new_word[] = $all_chars[$word[2].$word[3]]['beginning'];
				$char_type[] = 'normal';
			}
		}
		else
		{
			$new_word[] = $all_chars[$word[2].$word[3]]['middle'];
			$chars_statue[] = 'middle';

			if(in_array($word[2].$word[3], $isolated_chars))
			{
				$char_type[] = 'not_normal';
			}
			else
			{
				$char_type[] = 'normal';
			}
		}
		$x = 4;
	}
	else
	{
		$x = 2;	
	}

	for($x=4;$x< (strlen($word)-4) ;$x++)
	{
		if($char_type[count($char_type)-1] == 'not_normal' AND $x %2 == 0)
		{
			if(in_array($word[$x].$word[$x+1], $isolated_chars))
			{

				$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
				$char_type[] = 'not_normal';
			}
			else
			{

				$new_word[] = $all_chars[$word[$x].$word[$x+1]]['beginning'];
				$char_type[] = 'normal';
			}
		}
		elseif($char_type[count($char_type)-1] == 'normal' AND $x %2 == 0)
		{

			if(in_array($word[$x].$word[$x+1], $isolated_chars))
			{

				$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
				$char_type[] = 'not_normal';
			}
			else
			{

				$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
				$char_type[] = 'normal';
			}
		}

	}
	if(strlen($word)>6)
	{
		if($char_type[count($char_type)-1] == 'not_normal')
		{
			if(in_array($word[$x].$word[$x+1], $isolated_chars))
			{

				$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
				$char_type[] = 'not_normal';
			}
			else
			{

				if($word[strlen($word)-2].$word[strlen($word)-1] == 'ء')
				{
					$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
					$char_type[] = 'normal';
				}
				else
				{
					$new_word[] = $all_chars[$word[$x].$word[$x+1]]['beginning'];
					$char_type[] = 'normal';
				}

			}

			$x += 2;
		}
		elseif($char_type[count($char_type)-1] == 'normal')
		{

			if(in_array($word[$x].$word[$x+1], $isolated_chars))
			{

				$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
				$char_type[] = 'not_normal';
			}
			else
			{

				$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
				$char_type[] = 'normal';
			}

			$x += 2;
		}


	}

	if($char_type[count($char_type)-1] == 'not_normal')
	{

		if(in_array($word[$x].$word[$x+1], $isolated_chars))
		{		

			$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];

		}
		else
		{
			$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];

		}

	}
	else
	{
		if(in_array($word[$x].$word[$x+1], $isolated_chars))
		{

			$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];

		}
		else
		{

			$new_word[] = $all_chars[$word[$x].$word[$x+1]]['end'];

		}
	}

	return implode('',array_reverse($new_word));
}
?>

اذا اردت ان تقوم بكتابة كلمة معينة قم بتضمين هذا الملف في ملف ال php وثم بدل السطر

$text = 'العربية';

بـ

$text = word2uni('العربية');

لكن يجب الانتباه الى ترميز الملف يجب ان يكون utf-8 حصرا

الدالة هي جزء من مشروعي للكابتشا وفق الرخصة GUN GPL v2

لتحميل المثال :

word2uni.zip

اتمنى ان يكون مفيدا :happy:

المرفقات
213.png
4
#2

السلام عليكم

فعلاً أحييك على هذا المجهود الرائع

بارك الله فيك ودائماً في تقدم

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#3

رائع اخي الكريم شكرا على مجهودك

M.B.O

Mohamed Bin Othman

إبن المكلا

يابني البشر ماذا فعلتم بالبشر !!

إسـألـنـي

#4

ما شاء الله اخي الفاضل

الان الامور صارت رهيبة جداً , بحييك على المجهود الاكثر من رائع صراحة

=============
الطموح و الحافز سر النجاح

=============

AflamHQ.com | Palphp.com

#5

السلام عليكم اخواني و شكرا لكم هذه الاطراءات . :blush:

لكنني وجدت سطر زائد نسيت ان امسحه هو السطر 250 :huh:

			$chars_statue[] = 'middle';

فلا داعي له لانه لا يقوم باي عمل :happy:

تحياتي .

#6

أهلا عزيزي Linux Web Man

طبعا احييك على مجهودك الرائع وتفانيك في العمل .

في الحقيقة اطلعت على كودك اطلاع , ولكن بما اننا دخلنا في الامور الجدية التي تتطلع المتابعة من الجميع , فقد قمت بفحص الكود لتتبع المشكلة الحالية

وهي ان شاء الله مشكلة بسيطة تتعلق بالتركيبة ( لا , لآ , لأ )

بما انك كونت مصفوفة بالأحرف و اماكن تواجدها بالكلمات ينبغي ان نهتم بالاحرف التي جمعت في تركيبة واحدة وهي لأ ، لا ، لآ , طبعا بكافة حالتها ايضا

ويجب ان تعامل على انها حرف واحد اذن ان لها HTML ENTITY UNICODE خاص بها .

 ﻵ : ﻵ
ﻶ : ﻶ
ﻷ : ﻷ
ﻸ : ﻸ
ﻹ : ﻹ
ﻺ : ﻺ
ﻻ : ﻻ
ﻼ : ﻼ

مثال : كلمة الأخضر

الالجورثيم المتبع : إذا كان الحرف الحالي هو ( ل ) و الحرف التالي هو ( أ ) إذن التركيبة الحرفية ( تعتبر حرف واحد ) هي ( لأ ) ونعتبر ﻷ ممثلا لها هذا إذا كان الحرف معزولاً Isolated

ففي هذه الحالة يكون اما معزولا ً او يكون في على الشكل بآخر الكلمة Endform

ننتظر التحديث اللازم لهذه الأحرف اخي الفاضل وبارك الله في جهودك

تم تعديل هذه المشاركة بواسطة Hamdan Taima في 8 نوفمبر 2012 في 01:16

1

=============
الطموح و الحافز سر النجاح

=============

AflamHQ.com | Palphp.com

#9

تم تصحيح المشكلة التي تحدث عنها الأخ حمدان بتصحيح ملف word2uni.php

<?php
/**
 * word2uni
 * This code is a part of aCAPTCHA project, This copyright notice MUST stay intact for use
 * @package aCAPTCHA 
 * @author Abd Allatif Eymsh
 * @copyright (c) 2012
 * @param string $word
 * @license http://opensource.org/licenses/gpl-license.php GNU General Public License v2
 */
function word2uni($word)
{

	$new_word = array();
	$char_type = array();
	$isolated_chars = array('ا', 'د', 'ذ', 'أ', 'آ', 'ر', 'ؤ', 'ء', 'ز', 'و', 'ى', 'ة', 'إ');
	$alef = array('أ','ا','إ','آ');
	$lam = array('ل');
	$al_char = array();
	$all_chars = array
		(
			'ا' => array(
				'la_beg'		=>	 'ﻻ',
				'la_end'		=>	 'ﻼ',
				'middle'		=>   'ﺎ',

				'isolated'		=>   'ﺍ'
				),
			'إ' => array(
				'la_beg'		=>	 'ﻹ',
				'la_end'		=>	 'ﻺ',
				'middle'		=>   'ﺈ',

				'isolated'		=>   'ﺇ'
				),

			'ؤ' => array(

				'middle'		=>   'ﺅ',

				'isolated'		=>   'ﺆ'
				),
			'ء' => array(
				'middle'		=>   'ﺀ',
				'isolated'		=>   'ﺀ'
				),
			'أ' => array(
				'la_beg'		=>	 'ﻷ',
				'la_end'		=>	 'ﻸ',
				'middle'		=>   'ﺄ',

				'isolated'		=>   'ﺃ'
				),
			'آ' => array(
				'la_beg'		=>	 'ﻵ',
				'la_end'		=>	 'ﻶ',
				'middle'		=>   'ﺂ',

				'isolated'		=>   'ﺁ'
				),
			'ى' => array(

				'middle'		=>   'ﻰ',

				'isolated'		=>   'ﻯ'
				),
			'ب' => array(
				'beginning'		=>   'ﺑ',
				'middle'		=>   'ﺒ',
				'end'			=>   'ﺐ',
				'isolated'		=>   'ﺏ'
				),
			'ت' => array(
				'beginning'		=>   'ﺗ',
				'middle'		=>   'ﺘ',
				'end'			=>   'ﺖ',
				'isolated'		=>   'ﺕ'
				),
			'ث' => array(
				'beginning'		=>   'ﺛ',
				'middle'		=>   'ﺜ',
				'end'			=>   'ﺚ',
				'isolated'		=>   'ﺙ'
				),
			'ج' => array(
				'beginning'		=>   'ﺟ',
				'middle'		=>   'ﺠ',
				'end'			=>   'ﺞ',
				'isolated'		=>   'ﺝ'
				),
			'ح' => array(
				'beginning'		=>   'ﺣ',
				'middle'		=>   'ﺤ',
				'end'			=>   'ﺢ',
				'isolated'		=>   'ﺡ'
				),
			'خ' => array(
				'beginning'		=>   'ﺧ',
				'middle'		=>   'ﺨ',
				'end'			=>   'ﺦ',
				'isolated'		=>   'ﺥ'
				),
			'د' => array(
				'middle'		=>   'ﺪ',
				'isolated'		=>   'ﺩ'
				),
			'ذ' => array(
				'middle'		=>   'ﺬ',
				'isolated'		=>   'ﺫ'
				),
			'ر' => array(
				'middle'		=>   'ﺮ',
				'isolated'		=>   'ﺭ'
				),
			'ز' => array(
				'middle'		=>   'ﺰ',
				'isolated'		=>   'ﺯ'
				),
			'س' => array(
				'beginning'		=>   'ﺳ',
				'middle'		=>   'ﺴ',
				'end'			=>   'ﺲ',
				'isolated'		=>   'ﺱ'
				),
			'ش' => array(
				'beginning'		=>   'ﺷ',
				'middle'		=>   'ﺸ',
				'end'			=>   'ﺶ',
				'isolated'		=>   'ﺵ'
				),
			'ص' => array(
				'beginning'		=>   'ﺻ',
				'middle'		=>   'ﺼ',
				'end'			=>   'ﺺ',
				'isolated'		=>   'ﺹ'
				),
			'ض' => array(
				'beginning'		=>   'ﺿ',
				'middle'		=>   'ﻀ',
				'end'			=>   'ﺾ',
				'isolated'		=>   'ﺽ'
				),
			'ط' => array(
				'beginning'		=>   'ﻃ',
				'middle'		=>   'ﻄ',
				'end'			=>   'ﻂ',
				'isolated'		=>   'ﻁ'
				),
			'ظ' => array(
				'beginning'		=>   'ﻇ',
				'middle'		=>   'ﻈ',
				'end'			=>   'ﻆ',
				'isolated'		=>   'ﻅ'
				),
			'ع' => array(
				'beginning'		=>   'ﻋ',
				'middle'		=>   'ﻌ',
				'end'			=>   'ﻊ',
				'isolated'		=>   'ﻉ'
				),
			'غ' => array(
				'beginning'		=>   'ﻏ',
				'middle'		=>   'ﻐ',
				'end'			=>   'ﻎ',
				'isolated'		=>   'ﻍ'
				),
			'ف' => array(
				'beginning'		=>   'ﻓ',
				'middle'		=>   'ﻔ',
				'end'			=>   'ﻒ',
				'isolated'		=>   'ﻑ'
				),
			'ق' => array(
				'beginning'		=>   'ﻗ',
				'middle'		=>   'ﻘ',
				'end'			=>   'ﻖ',
				'isolated'		=>   'ﻕ'
				),
			'ك' => array(
				'beginning'		=>   'ﻛ',
				'middle'		=>   'ﻜ',
				'end'			=>   'ﻚ',
				'isolated'		=>   'ﻙ'
				),
			'ل' => array(
				'beginning'		=>   'ﻟ',
				'middle'		=>   'ﻠ',
				'end'			=>   'ﻞ',
				'isolated'		=>   'ﻝ'
				),
			'م' => array(
				'beginning'		=>   'ﻣ',
				'middle'		=>   'ﻤ',
				'end'			=>   'ﻢ',
				'isolated'		=>   'ﻡ'
				),
			'ن' => array(
				'beginning'		=>   'ﻧ',
				'middle'		=>   'ﻨ',
				'end'			=>   'ﻦ',
				'isolated'		=>   'ﻥ'
				),
			'ه' => array(
				'beginning'		=>   'ﻫ',
				'middle'		=>   'ﻬ',
				'end'			=>   'ﻪ',
				'isolated'		=>   'ﻩ'
				),
			'و' => array(
				'middle'		=>   'ﻮ',
				'isolated'		=>   'ﻭ'
				),
			'ي' => array(
				'beginning'		=>   'ﻳ',
				'middle'		=>   'ﻴ',
				'end'			=>   'ﻲ',
				'isolated'		=>   'ﻱ'
				),
			'ئ' => array(
				'beginning'		=>   'ﺋ',
				'middle'		=>   'ﺌ',
				'end'			=>   'ﺊ',
				'isolated'		=>   'ﺉ'
				),
			'ة' => array(
				'middle'		=>   'ﺔ',
				'isolated'		=>   'ﺓ'
				)
		);

	if(in_array($word[0].$word[1], $isolated_chars))
	{
		$new_word[] = $all_chars[$word[0].$word[1]]['isolated'];
		$char_type[] = 'not_normal';
		$al_char[] = false;
	}
	else
	{
		if(in_array($word[0].$word[1], $lam) AND in_array($word[2].$word[3], $alef))
		{
			$new_word[] = $all_chars [$word[2].$word[3]]['la_beg'];
			$char_type[] = 'not_normal';

			$al_char[] = true;
		}
		else
		{

			$new_word[] = $all_chars[$word[0].$word[1]]['beginning'];
			$char_type[] = 'normal';
			$al_char[] = false;
		}

	}

	if(strlen($word) > 4)
	{
		if($char_type[0] == 'not_normal')

		{
			if(in_array($word[2].$word[3], $isolated_chars))
			{
				if($al_char[count($al_char)-1] == false)
				{
					$new_word[] = $all_chars[$word[2].$word[3]]['isolated'];
					$char_type[] = 'not_normal';

				}
				$al_char[] = false;

			}
			else
			{
				if(in_array($word[2].$word[3], $lam) AND in_array($word[4].$word[5], $alef))
				{
					$new_word[] = $all_chars[$word[4].$word[5]]['la_beg'];
					$char_type[] = 'not_normal';
					$al_char[] = true;
				}
				else
				{
					$new_word[] = $all_chars[$word[2].$word[3]]['beginning'];
					$char_type[] = 'normal';
					$al_char[] = false;
				}

			}
		}
		else
		{
			if(in_array($word[2].$word[3], $lam) AND in_array($word[4].$word[5], $alef))
			{

				$new_word[] = $all_chars[$word[4].$word[5]]['la_end'];
				$char_type[] = 'not_normal';
				$al_char[] = true;
			}
			else
			{
				$new_word[] = $all_chars[$word[2].$word[3]]['middle'];
				if(in_array($word[2].$word[3], $isolated_chars))
				{
					$char_type[] = 'not_normal';
					$al_char[] = false;
				}
				else
				{
					$char_type[] = 'normal';
					$al_char[] = false;
				}
			}

		}
		$x = 4;
	}
	else
	{
		$x = 2;	
	}

	for($x=4;$x< (strlen($word)-4) ;$x++)
	{
		if($char_type[count($char_type)-1] == 'not_normal' AND $x %2 == 0)
		{
			if(in_array($word[$x].$word[$x+1], $isolated_chars))
			{
				if($al_char[count($al_char)-1] == false)
				{
					$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
					$char_type[] = 'not_normal';

				}
				$al_char[] = false;
			}
			elseif(in_array($word[$x].$word[$x+1], $lam) AND in_array($word[$x+2].$word[$x+3], $alef))
			{

				$new_word[] = $all_chars[$word[$x+2].$word[$x+3]]['la_beg'];
				$char_type[] = 'not_normal';
				$al_char[] = true;
			}
			else
			{

				$new_word[] = $all_chars[$word[$x].$word[$x+1]]['beginning'];
				$char_type[] = 'normal';
				$al_char[] = false;
			}
		}
		elseif($char_type[count($char_type)-1] == 'normal' AND $x %2 == 0)
		{

			if(in_array($word[$x].$word[$x+1], $isolated_chars))
			{
				if($al_char[count($al_char)-1] == false)
				{
					$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
					$char_type[] = 'not_normal';
				}
				$al_char[] = false;
			}
			elseif(in_array($word[$x].$word[$x+1], $lam) AND in_array($word[$x+2].$word[$x+3], $alef))
			{

				$new_word[] = $all_chars[$word[$x+2].$word[$x+3]]['la_end'];
				$char_type[] = 'not_normal';
				$al_char[] = true;
			}
			else
			{

				$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
				$char_type[] = 'normal';
				$al_char[] = false;
			}
		}

	}
	if(strlen($word)>6)
	{
		if($char_type[count($char_type)-1] == 'not_normal')
		{
			if(in_array($word[$x].$word[$x+1], $isolated_chars))
			{
				if($al_char[count($al_char)-1] == false)
				{
					$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
					$char_type[] = 'not_normal';
				}
				$al_char[] = false;
			}
			else
			{

				if($word[strlen($word)-2].$word[strlen($word)-1] == 'ء')
				{
					if($al_char[count($al_char)-1] == true)
					{
						$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
						$char_type[] = 'normal';
					}
					$al_char[] = false;
				}
				elseif(in_array($word[$x].$word[$x+1], $lam) AND in_array($word[$x+2].$word[$x+3], $alef))
				{

					$new_word[] = $all_chars[$word[$x+2].$word[$x+3]]['la_end'];
					$char_type[] = 'not_normal';
					$al_char[] = true;
				}
				else
				{
					$new_word[] = $all_chars[$word[$x].$word[$x+1]]['beginning'];
					$char_type[] = 'normal';
					$al_char[] = false;
				}

			}

			$x += 2;
		}
		elseif($char_type[count($char_type)-1] == 'normal' AND $al_char[count($al_char)-1] == false)
		{

			if(in_array($word[$x].$word[$x+1], $isolated_chars))
			{
				if($al_char[count($al_char)-1] == false)
				{
					$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
					$char_type[] = 'not_normal';
				}
				$al_char[] = false;
			}
			elseif(in_array($word[$x].$word[$x+1], $lam) AND in_array($word[$x+2].$word[$x+3], $alef))
			{

				$new_word[] = $all_chars[$word[$x+2].$word[$x+3]]['la_end'];
				$char_type[] = 'not_normal';
				$al_char[] = true;
			}
			else
			{

				$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
				$char_type[] = 'normal';
				$al_char[] = false;
			}

			$x += 2;
		}


	}

	if($char_type[count($char_type)-1] == 'not_normal')
	{

		if(in_array($word[$x].$word[$x+1], $isolated_chars))
		{		
			if($al_char[count($al_char)-1] == false)
			{
				$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
			}

		}
		else
		{
			$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];

		}

	}
	else
	{
		if(in_array($word[$x].$word[$x+1], $isolated_chars))
		{

			$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];

		}
		else
		{

			$new_word[] = $all_chars[$word[$x].$word[$x+1]]['end'];

		}
	}

	return implode('',array_reverse($new_word));
}
?>

و يمكن تحميل المثال المصحح من هنا

word2uni.zip

#10

أحسنت اخي الفاضل ,

ما شاء الله تم التجربة وتأكيد حل المشكلة بشكل جميل وسلس الله يزيدك من علمه

=============
الطموح و الحافز سر النجاح

=============

AflamHQ.com | Palphp.com

#11

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

نحن في مشروع PHP واللغة العربية بادرنا إلى العمل على هذه الإشكالية منذ العام 2006 ونشرنا مكتبة بهذا الخصوص، وهي جزء الآن من مشروع PHP واللغة العربية، ويمكن أن تروا مثالا عنها على هذا الرابط:

http://www.ar-php.org/Glyphs-example-php-arabic.html

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

http://www.ar-php.org

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

http://www.ar-php.org/features-php-arabic.html

2
#12

الله عليك :)

بس المشكله هنا انه ممكن اكتب كلمه واحده

طيب لو انا عايز اكتب جمله اعمل اه ؟

#13

يمكنك حل هذه المشكلة باستخدام هذه الدالة

<?php
function str2word($string)
{
	$words = array_reverse(explode(' ', $string));
	$result = '';
	foreach ($words as $word)
	{
		$result .= word2uni($word).' ';
	}
	return $result;
}
?>

ويمكنك استدعاءها بالشكل :

imagettftext($image, 12, 0, 0, 0, $color, $font, str2word('السلام عليكم'));
#14

شكرا علي الرد السريع

حطيت الفىشن الي ادتهونى و اشتغل

بس في مشكله مش عارف فيين في حرف ال "ك" و "ي"

مثلا انا عيز اكتب

"بك لك فك دك قك كم كل شك

بي لي في دي قي كي كي شي

بس لس فس دس قس شش"

Screen%20Shot%202012-12-26%20at%209.33.24%20PM.png

شكرا

#15

صحيح اخي هنالك مشكلة في كتابة اي كلمة تتكون من حرفين ساعمل بإذن الله على تصحيح هذه المشكلة قريبا :blush:

#16

أخي العزيز rawaby88 كما سبق وأن أشرت، ما تبحث عنه موجود ضمن مشروع PHP واللغة العربية، وهنا أمثلة عنه:

http://www.ar-php.org/Glyphs-example-php-arabic.html

وهي مكتبة مجانية تماما ويمكنك الحصول عليها من هنا بالنقر على رابط Download

http://www.ar-php.org/index-php-arabic.html

أما بالنسبة للأخ linux web man عليك التفكير بالحالات التي ترد فيها الأرقام ضمن النص، أو كلمات إنجليزية في سياق النص العربي، أو حتى التشكيل أو علامات الترقيم، كلها أمور يجب أخذها بعين الاعتبار أيضا، يمكنك الإطلاع على الشيفرة المصدرية في الملف Glyphs.php ضمن المكتبة التي أشرت إليها أعلاه، وسأكون سعيدا بأي نصح أو كشف للعلل أو إقتراحات للتطوير.

3
#17

اخي العزيز

لقد قمت بتجربت ال "php-arabic" تحيه عظيمه علي هذا العمل الجبار ولكن وجت "باج" صغيير و هوا

اول حرف في اول الكلمه في اول السطر

مثال

o3.png

o2.png

شكرا

#18
rawaby88 كتب:

اخي العزيز

لقد قمت بتجربت ال "php-arabic" تحيه عظيمه علي هذا العمل الجبار ولكن وجت "باج" صغيير و هوا

اول حرف في اول الكلمه في اول السطر

مثال

o3.png

o2.png

شكرا

في حقيقة الأمر لقد تم الإبلاغ عن هذا الخطأ من قبل، وتم حله في مكنز التطوير وسيتم نشر التصويب في الإصدار 3.6 القادم، على كل حال يمكنك الحصول على التصويب مباشرة الآن من خلال استبدال ملف Glyphs.php والموجود ضمن المجلد Arabic بآخر نسخة محدثة منه والتي يمكن الحصول عليها من الرابط التالي (قم بالنقر على الرابط Download this file في أعلى الصفحة وليس نسخ ولصق الكود من نافذة المتصفح):

http://sourceforge.net/p/ar-php/code/32/tree/I18N/Arabic/Glyphs.php

1
#19

تم تصحيح بعض المشاكل التي ذكرها الاستاذ خالد و غيره من الاعضاء (كتابة حرف واحد أو حرفين - استخدام جمل بدلاً من كلمات - كتابة الارقام أو الرموز أو الاحرف الانكليزية) , لكن يبقى هناك بعض المشاكل كمشكلة التشكيل و مشكلة كتابة كلمة عربية ملتصقة بكلمة اجنبية ... , وتم دمجها في مكتبة التعامل مع الصور , سأحوال قريبا ً معالجة هذه الاخطاء وغيرها .

يمكن الوصول الى المكتبة عن طريق الموضوع التالي . أو تحميلها مباشرة من هنا

تم تعديل هذه المشاركة بواسطة Abd Allatif في 20 أبريل 2013 في 22:25

#20

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

 

 

جزاك الله أخي الكريم على هذا المجهود العظيم

 

 

جعل الله هذا العمل في موازيين حسناتكم , فقد استفدنا من هذا العمل بصورة كبيرة

 

 

لكن ظهرت هناك مشكلة في حرف "ث" و "ؤ" ,  عند كتابتهم في جملة ولنفرض "أكثر"  يظهر حرف الثاء مرتين " ث أكثر"

 

 

هل بإمكانك حل هذه المشكلة , أو إخبارنا بكيفية حلها

 

 

ولك جزيل الشكر

1
#21
emaneman كتب:

لكن ظهرت هناك مشكلة في حرف "ث" و "ؤ" ,  عند كتابتهم في جملة ولنفرض "أكثر"  يظهر حرف الثاء مرتين " ث أكثر"

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

شكراً لك لتبليغك لهذه المشكلة , المشكلة موجودة في السطر 50 من ملف function.image.php حيث انني قمت بالغلط بكتابة الحرف "ص" بدلاً من "ث" ونسيت إضافة الحرف "ؤ"

على كل حال يمكن حل هذه المشكلة باستبدال السطر 50 بالسطر التالي :

 $chars_array = array('ا', 'ب', 'ت', 'ج', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ظ', 'ل', 'م', 'ن', 'ه', 'و', 'ي', 'أ', 'إ', 'ى', 'ى', 'ئ', 'ء', 'ة', 'ك','ؤ','ث');

ووجد ايضاً عن طريق التجربة مشكلة في كتابة الحرف "ء" سأعمل على حلها في الإصدار القادم ان شاء الله .

1
#22
Abd Allatif كتب:

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

شكراً لك لتبليغك لهذه المشكلة , المشكلة موجودة في السطر 50 من ملف function.image.php حيث انني قمت بالغلط بكتابة الحرف "ص" بدلاً من "ث" ونسيت إضافة الحرف "ؤ"

على كل حال يمكن حل هذه المشكلة باستبدال السطر 50 بالسطر التالي :

 $chars_array = array('ا', 'ب', 'ت', 'ج', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ظ', 'ل', 'م', 'ن', 'ه', 'و', 'ي', 'أ', 'إ', 'ى', 'ى', 'ئ', 'ء', 'ة', 'ك','ؤ','ث');

ووجد ايضاً عن طريق التجربة مشكلة في كتابة الحرف "ء" سأعمل على حلها في الإصدار القادم ان شاء الله .

 

شكرا جزيلا لك 

جعله الله في موازين حسناتك .. 

#23

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

اسف على رفع مشاركه قديمه بعض الشيء ولكني لم اجد حلا اخر,

 

المكتبه ممتازه ولكنها وكما ذكر الاستاذ خالد الشمعة لا تعمل عند تمرير اي شيء غير الحروف العربيه، يعني الارقام و الحروف الانكليزيه تعطلها,

اتمنى اصلاح ذالك لانها ممتازه وصغيره وخفيفه

 

تحياتي

[moveleft]

MiN! SpId3r SqUaD

[/moveleft]

#24
MiNi.SpIdEr كتب:

المكتبه ممتازه ولكنها وكما ذكر الاستاذ خالد الشمعة لا تعمل عند تمرير اي شيء غير الحروف العربيه، يعني الارقام و الحروف الانكليزيه تعطلها,

اتمنى اصلاح ذالك لانها ممتازه وصغيره وخفيفه

قمت بإضافة هذه الميزة في مكتبة التعامل مع الصور التي يمكن تحميلها عبر الرابط التالي ، طبعًا هناك مشكلة صغيرة في حرفي "ث" و "ؤ" تم حلهم وإصدار ترقيعة بسيطة في التعليق رقم 21

#25

الكلمات المخرجة ملصقة ببعضها 

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…