PDA

View Full Version : نوشتن متن فارسی روی عکس



Bahram0110
یک شنبه 07 مرداد 1386, 18:19 عصر
$font = imageloadfont("farsifont");

کسی فونت فارسی برای استفاده در این تابع نداره؟
یا! : می شه روی یه عکس متن فارسی بنویسیم؟
این تاپیکو با عنوان Imageloadfont هم ایجاد کردم ولی کسی جواب نداد فکر کنم عنوانش یکم ترسناک بود! :لبخند:

Bahram0110
یک شنبه 07 مرداد 1386, 18:20 عصر
دوست عزیزمون I,Nobody نوشتن که :



این مشکل اغلب برنامه نویس های ایرانی هست که فکر نمی کنم هنوز حل شده باشه.
البته یادمه قبلاً یکی دو نفر(یا تیم) این کارو انجام داده بودن ولی متاسفانه معماری رو توضیح ندادن و میخواستن ازش استفاده تجاری بکنن.
البته اونا هم فقط با یک فونت کار میکردن.
خیلی وقته که دیگه خبر ندارم که این مشکل حل شده یا نه؟ چون بهش نیاز پیدا نکردم.
اگه کسی چیزی پیدا کرده، لطفاً توی همین تاپیک قرار بده

Bahram0110
یک شنبه 07 مرداد 1386, 18:23 عصر
برای ساخت فونت تو این عکس یه توضیحاتی داده ولی من چیزی . . . :لبخند:
http://www.persianuser.org/ucenter/uploads_images/imageloadfont.jpg

فکر کنم فونتش باید فرمت خاصی داشته باشه :متفکر:

Bahram0110
یک شنبه 07 مرداد 1386, 18:24 عصر
نوشته شده توسط : I,Nobody


ساختن عکس با فونت های مختلف که کاری نداره.
PHP توابع غنی برای این کار داره.
مساله فارسی نویسی بدون اشکال در ساخت عکس هست.

moslem-visual
چهارشنبه 10 مرداد 1386, 17:07 عصر
متاسفانه این مشکل وجود داره و تابحال راه حلی به طور عمومی ارائه نشده، نظیر این مشکل در ساخت PDF توسط توابع مربوطه وجود داره که حل اون نیاز به کار تخصصی و با همکاری شورای حمایت از زبان پارسی در وب داره.

alireza82
شنبه 13 مرداد 1386, 02:03 صبح
متاسفانه این مشکل وجود داره و تابحال راه حلی به طور عمومی ارائه نشده، نظیر این مشکل در ساخت PDF توسط توابع مربوطه وجود داره که حل اون نیاز به کار تخصصی و با همکاری شورای حمایت از زبان پارسی در وب داره.
سلام
این فایلی که ضمیمه کردم یه کلاس دست نوشته برای حل مشکل فارسی نویسی در pdf ها هست. البته من وقت نکردم تستش کنم اما نویسندش ادعا کرده مشکل رو تا حد زیادی اما نه کاملا حل کرده.
موفق باشید

Bahram0110
شنبه 13 مرداد 1386, 23:07 عصر
سلام
این فایلی که ضمیمه کردم یه کلاس دست نوشته برای حل مشکل فارسی نویسی در pdf ها هست.
دوست عزیز مثل اینکه چند تا فایل پروژه رو ضمیمه نکردی
ارور داد :متفکر:

daszarrin
شنبه 05 فروردین 1391, 14:24 عصر
مشکل حل شد: http://developer.berlios.de/project/showfiles.php?group_id=4533
مسیر دوم برای دانلود فایل ها: http://daszarrin.persiangig.com/PHP/persian_log2vis-2.0.tar.bz2

farhadfery
شنبه 05 فروردین 1391, 19:50 عصر
قبلا در موردش تو همین انجمن بحث شده. سرچ بزنید!! فکر کنم در بخش تاپیک های مهم (http://barnamenevis.org/showthread.php?19114-%D9%81%D9%87%D8%B1%D8%B3%D8%AA-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D9%87%D8%A7%DB%8C-%D9%85%D9%87%D9%85-%D8%A7%DB%8C%D9%86-%D8%A8%D8%AE%D8%B4) هم باشه. همانطر که گقته شد هنوز راه حل جامع ارایه نشده.

MMSHFE
یک شنبه 06 فروردین 1391, 22:13 عصر
من هم دارم یک کلاس ساده و راحت برای فارسی نویسی روی عکس مینویسم که به محض تکمیل، اینجا میگذارم. سعی کردم خیلی ساده تر از کدهای مشابه باشه و به کتابخانه خاصی هم نیاز نداره. موفق باشید.

SadeghPro19
یک شنبه 06 فروردین 1391, 22:23 عصر
مهم اینه که درست کار کنه
اگه درست کار کنه فوقالعاده هست...

MMSHFE
یک شنبه 06 فروردین 1391, 22:42 عصر
هم درست کار میکنه، هم اینکه همراه با آموزش هست که خودتون هم بتونید در موارد مشابه، دست به کار بشین. موفق باشید.

MMSHFE
دوشنبه 07 فروردین 1391, 02:22 صبح
این کد رو ببینید (البته اینجا کمی بهم ریخته، بخصوص خونه های آرایه های حاوی حروف فارسی که از آخر به اول نوشته شده - بخاطر ادیتور - و بخاطر همین فایلش رو هم ضمیمه کردم) :


<?php
function farsi_correct($string) {
// Reverse the string
$len = mb_strlen($string, 'utf-8');
$result = '';
for($i = ($len - 1); $i >= 0; $i--) {
$result .= mb_substr($string, $i, 1, 'utf-8');
}
// These chars work as space when a character comes after them, so the next character will not connect to them
$spaces_after = array('', ' ', 'ا', 'آ', 'أ', 'إ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'و', 'ؤ');
// These chars work as space when a character comes before them, so the previous character will not connect to them
$spaces_before = array('', ' ');
// Persian chars with their different styles at different positions:
// Alone, After a non-space char, Before a non-space char, between two non-space chars
$chars = array();
$chars[] = array('آ', 'ﺂ', 'آ', 'ﺂ');
$chars[] = array('أ', 'ﺄ', 'ﺃ', 'ﺄ');
$chars[] = array('إ', 'ﺈ', 'ﺇ', 'ﺈ');
$chars[] = array('ا', 'ﺎ', 'ا', 'ﺎ');
$chars[] = array('ب', 'ﺐ', 'ﺑ', 'ﺒ');
$chars[] = array('پ', 'ﭗ', 'ﭘ', 'ﭙ');
$chars[] = array('ت', 'ﺖ', 'ﺗ', 'ﺘ');
$chars[] = array('ث', 'ﺚ', 'ﺛ', 'ﺜ');
$chars[] = array('ج', 'ﺞ', 'ﺟ', 'ﺠ');
$chars[] = array('چ', 'ﭻ', 'ﭼ', 'ﭽ');
$chars[] = array('ح', 'ﺢ', 'ﺣ', 'ﺤ');
$chars[] = array('خ', 'ﺦ', 'ﺧ', 'ﺨ');
$chars[] = array('د', 'ﺪ', 'ﺩ', 'ﺪ');
$chars[] = array('ذ', 'ﺬ', 'ﺫ', 'ﺬ');
$chars[] = array('ر', 'ﺮ', 'ﺭ', 'ﺮ');
$chars[] = array('ز', 'ﺰ', 'ﺯ', 'ﺰ');
$chars[] = array('ژ', 'ﮋ', 'ﮊ', 'ﮋ');
$chars[] = array('س', 'ﺲ', 'ﺳ', 'ﺴ');
$chars[] = array('ش', 'ﺶ', 'ﺷ', 'ﺸ');
$chars[] = array('ص', 'ﺺ', 'ﺻ', 'ﺼ');
$chars[] = array('ض', 'ﺾ', 'ﺿ', 'ﻀ');
$chars[] = array('ط', 'ﻂ', 'ﻃ', 'ﻄ');
$chars[] = array('ظ', 'ﻆ', 'ﻇ', 'ﻈ');
$chars[] = array('ع', 'ﻊ', 'ﻋ', 'ﻌ');
$chars[] = array('غ', 'ﻎ', 'ﻏ', 'ﻐ');
$chars[] = array('ف', 'ﻒ', 'ﻓ', 'ﻔ');
$chars[] = array('ق', 'ﻖ', 'ﻗ', 'ﻘ');
$chars[] = array('ک', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('ك', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('گ', 'ﮓ', 'ﮔ', 'ﮕ');
$chars[] = array('ل', 'ﻞ', 'ﻟ', 'ﻠ');
$chars[] = array('م', 'ﻢ', 'ﻣ', 'ﻤ');
$chars[] = array('ن', 'ﻦ', 'ﻧ', 'ﻨ');
$chars[] = array('و', 'ﻮ', 'ﻭ', 'ﻮ');
$chars[] = array('ؤ', 'ﺆ', 'ﺅ', 'ﺆ');
$chars[] = array('ی', 'ﯽ', 'ﯾ', 'ﯿ');
$chars[] = array('ي', 'ﻲ', 'ﻳ', 'ﻴ');
$chars[] = array('ئ', 'ﺊ', 'ﺋ', 'ﺌ');
$chars[] = array('ه', 'ﻪ', 'ﮬ', 'ﮭ');
$chars[] = array('ۀ', 'ﮥ', 'ﮬ', 'ﮭ');
$chars[] = array('ة', 'ﺔ', 'ﺗ', 'ﺘ');
$chars[] = array(' ', ' ', ' ', ' ');
$chars[] = array('0', '0', '0', '0');
$chars[] = array('1', '1', '1', '1');
$chars[] = array('2', '2', '2', '2');
$chars[] = array('3', '3', '3', '3');
$chars[] = array('4', '4', '4', '4');
$chars[] = array('5', '5', '5', '5');
$chars[] = array('6', '6', '6', '6');
$chars[] = array('7', '7', '7', '7');
$chars[] = array('8', '8', '8', '8');
$chars[] = array('9', '9', '9', '9');
// Start processing the reversed string
$string = $result;
$len = mb_strlen($string, 'utf-8');
$result = '';
for($i = 0; $i < $len; $i++) {
$previous_char = $i > 0 ? mb_substr($string, $i - 1, 1, 'utf-8') : '';
$current_char = mb_substr($string, $i, 1, 'utf-8');
$next_char = $i < ($len - 1) ? mb_substr($string, $i + 1, 1, 'utf-8') : '';
foreach($chars as $char) {
if(in_array($current_char, $char)) {
if(!in_array($next_char, $spaces_after) && !in_array($previous_char, $spaces_before)) {
$result .= $char[3];
}
elseif(!in_array($previous_char, $spaces_before)) {
$result .= $char[2];
}
elseif(!in_array($next_char, $spaces_after)) {
$result .= $char[1];
}
else {
$result .= $char[0];
}
}
}
}
return $result;
}
$string = isset($_GET['string']) ? farsi_correct($_GET['string']) : '';
$w = 300;
$h = 200;
$im = imagecreatetruecolor($w, $h);
$c_green = imagecolorallocate($im, 127, 255, 127);
$c_black = imagecolorallocate($im, 0, 0, 0);
imagefill($im, ceil($w / 2), ceil($h / 2), $c_green);
$box = imagettfbbox(10, 0, 'tahoma.ttf', $string);
imagettftext($im, 10, 0, ($w - $box[4]) / 2, ($h - $box[5]) / 2, $c_black, 'tahoma.ttf', $string);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
این هم نمونه خروجی اون هست (من کد رو توی پوشه faimage و به اسم index.php ذخیره کردم و بصورت مهمان خوانده یا ناخوانده حبیب خداست=localhost/faimage/?string اون رو صدا زدم) :
84672
فعلاً بصورت یک تابع نوشتمش. کار تابع مذکور (farsi_correct) تبدیل متن فارسی به شکل درست برای نمایش توسط GD هست. اگه فرصت کنم، بصورت یک کلاس در میارمش که بتونید به هر شکل دلخواه ازش استفاده کنید. هرجایی از کد نیاز به توضیح داشت، بفرمایید تا توضیحات لازم رو ارائه کنم.
موفق باشید.

MMSHFE
دوشنبه 07 فروردین 1391, 10:44 صبح
البته همونطور که میبینید، همه کارکترها رو توی این فایل نگذاشتم و خودتون میتونید تکمیلش کنید. مثلاً الآن نقطه و کاما و... یا ء (همزه) رو نمیشناسه. اگه بخواین این کارکترها رو اضافه کنید، باید هم در آرایه chars اونها رو قرار بدین (حالتهای تنها، چسبیده به حرف قبل، چسبیده به حرف بعد و ازدوطرف چسبیده رو باید تعریف کنید که مثلاً برای کاما و همزه و نقطه، هر چهار حالت مثل هم هست). ضمناً اگه کارکتر مربوطه به حرف بعدیش نمی چسبه، اون رو توی آرایه spaces_after و اگه به حرف قبلیش نمیچسبه، به spaces_before اضافه کنید. مثلاً نقطه توی هر دو آرایه قرار میگیره. اگه اینکار رو نکنید، حروف قبل و بعدش درست ظاهر نمیشه. موفق باشید.

exlord
شنبه 13 خرداد 1391, 12:49 عصر
این کدی که قرار دادین خیلی خوبه ولی تنها اشکالی که داره اینکه اگه متن حروف انگلیسی توش باشه ائنا حذف میشن ... میتونین اینو اصلاح کنین ؟؟؟

MMSHFE
شنبه 13 خرداد 1391, 15:00 عصر
اینو امتحان کنید:


<?php
function farsi_correct($string) {
// Reverse the string
$len = mb_strlen($string, 'utf-8');
$result = '';
for($i = ($len - 1); $i >= 0; $i--) {
$result .= mb_substr($string, $i, 1, 'utf-8');
}
// These chars work as space when a character comes after them, so the next character will not connect to them
$spaces_after = array('', ' ', 'ا', 'آ', 'أ', 'إ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'و', 'ؤ');
// These chars work as space when a character comes before them, so the previous character will not connect to them
$spaces_before = array('', ' ');
// Persian chars with their different styles at different positions:
// Alone, After a non-space char, Before a non-space char, between two non-space chars
$chars = array();
$chars[] = array('آ', 'ﺂ', 'آ', 'ﺂ');
$chars[] = array('أ', 'ﺄ', 'ﺃ', 'ﺄ');
$chars[] = array('إ', 'ﺈ', 'ﺇ', 'ﺈ');
$chars[] = array('ا', 'ﺎ', 'ا', 'ﺎ');
$chars[] = array('ب', 'ﺐ', 'ﺑ', 'ﺒ');
$chars[] = array('پ', 'ﭗ', 'ﭘ', 'ﭙ');
$chars[] = array('ت', 'ﺖ', 'ﺗ', 'ﺘ');
$chars[] = array('ث', 'ﺚ', 'ﺛ', 'ﺜ');
$chars[] = array('ج', 'ﺞ', 'ﺟ', 'ﺠ');
$chars[] = array('چ', 'ﭻ', 'ﭼ', 'ﭽ');
$chars[] = array('ح', 'ﺢ', 'ﺣ', 'ﺤ');
$chars[] = array('خ', 'ﺦ', 'ﺧ', 'ﺨ');
$chars[] = array('د', 'ﺪ', 'ﺩ', 'ﺪ');
$chars[] = array('ذ', 'ﺬ', 'ﺫ', 'ﺬ');
$chars[] = array('ر', 'ﺮ', 'ﺭ', 'ﺮ');
$chars[] = array('ز', 'ﺰ', 'ﺯ', 'ﺰ');
$chars[] = array('ژ', 'ﮋ', 'ﮊ', 'ﮋ');
$chars[] = array('س', 'ﺲ', 'ﺳ', 'ﺴ');
$chars[] = array('ش', 'ﺶ', 'ﺷ', 'ﺸ');
$chars[] = array('ص', 'ﺺ', 'ﺻ', 'ﺼ');
$chars[] = array('ض', 'ﺾ', 'ﺿ', 'ﻀ');
$chars[] = array('ط', 'ﻂ', 'ﻃ', 'ﻄ');
$chars[] = array('ظ', 'ﻆ', 'ﻇ', 'ﻈ');
$chars[] = array('ع', 'ﻊ', 'ﻋ', 'ﻌ');
$chars[] = array('غ', 'ﻎ', 'ﻏ', 'ﻐ');
$chars[] = array('ف', 'ﻒ', 'ﻓ', 'ﻔ');
$chars[] = array('ق', 'ﻖ', 'ﻗ', 'ﻘ');
$chars[] = array('ک', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('ك', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('گ', 'ﮓ', 'ﮔ', 'ﮕ');
$chars[] = array('ل', 'ﻞ', 'ﻟ', 'ﻠ');
$chars[] = array('م', 'ﻢ', 'ﻣ', 'ﻤ');
$chars[] = array('ن', 'ﻦ', 'ﻧ', 'ﻨ');
$chars[] = array('و', 'ﻮ', 'ﻭ', 'ﻮ');
$chars[] = array('ؤ', 'ﺆ', 'ﺅ', 'ﺆ');
$chars[] = array('ی', 'ﯽ', 'ﯾ', 'ﯿ');
$chars[] = array('ي', 'ﻲ', 'ﻳ', 'ﻴ');
$chars[] = array('ئ', 'ﺊ', 'ﺋ', 'ﺌ');
$chars[] = array('ه', 'ﻪ', 'ﮬ', 'ﮭ');
$chars[] = array('ۀ', 'ﮥ', 'ﮬ', 'ﮭ');
$chars[] = array('ة', 'ﺔ', 'ﺗ', 'ﺘ');
$chars[] = array(' ', ' ', ' ', ' ');
$chars[] = array('0', '0', '0', '0');
$chars[] = array('1', '1', '1', '1');
$chars[] = array('2', '2', '2', '2');
$chars[] = array('3', '3', '3', '3');
$chars[] = array('4', '4', '4', '4');
$chars[] = array('5', '5', '5', '5');
$chars[] = array('6', '6', '6', '6');
$chars[] = array('7', '7', '7', '7');
$chars[] = array('8', '8', '8', '8');
$chars[] = array('9', '9', '9', '9');
$engs = array_merge(range('A', 'Z'), range('a', 'z');
foreach($engs as $eng) {
$chars[] = array($eng, $eng, $eng, $eng);
}
// Start processing the reversed string
$string = $result;
$len = mb_strlen($string, 'utf-8');
$result = '';
for($i = 0; $i < $len; $i++) {
$previous_char = $i > 0 ? mb_substr($string, $i - 1, 1, 'utf-8') : '';
$current_char = mb_substr($string, $i, 1, 'utf-8');
$next_char = $i < ($len - 1) ? mb_substr($string, $i + 1, 1, 'utf-8') : '';
foreach($chars as $char) {
if(in_array($current_char, $char)) {
if(!in_array($next_char, $spaces_after) && !in_array($previous_char, $spaces_before)) {
$result .= $char[3];
}
elseif(!in_array($previous_char, $spaces_before)) {
$result .= $char[2];
}
elseif(!in_array($next_char, $spaces_after)) {
$result .= $char[1];
}
else {
$result .= $char[0];
}
}
}
}
return $result;
}
$string = isset($_GET['string']) ? farsi_correct($_GET['string']) : '';
$w = 300;
$h = 200;
$im = imagecreatetruecolor($w, $h);
$c_green = imagecolorallocate($im, 127, 255, 127);
$c_black = imagecolorallocate($im, 0, 0, 0);
imagefill($im, ceil($w / 2), ceil($h / 2), $c_green);
$box = imagettfbbox(10, 0, 'tahoma.ttf', $string);
imagettftext($im, 10, 0, ($w - $box[4]) / 2, ($h - $box[5]) / 2, $c_black, 'tahoma.ttf', $string);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>

exlord
شنبه 13 خرداد 1391, 15:04 عصر
برعکس چاپ میکنه :قهقهه:

exlord
شنبه 13 خرداد 1391, 15:41 عصر
ok خودم درستش کردم ... کدشو کاملتر کردم که تمام حروف رو شامل بشه ...
الان جملات انگلیسی هم درست چاپ میشن ...


function farsi_correct($string)
{
// Reverse the string
$len = mb_strlen($string, 'utf-8');
$result = '';
for ($i = ($len - 1); $i >= 0; $i--) {
$result .= mb_substr($string, $i, 1, 'utf-8');
}
// These chars work as space when a character comes after them, so the next character will not connect to them
$spaces_after = array('', ' ', 'ا', 'آ', 'أ', 'إ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'و', 'ؤ');
// These chars work as space when a character comes before them, so the previous character will not connect to them
$spaces_before = array('', ' ');
// Persian chars with their different styles at different positions:
// Alone, After a non-space char, Before a non-space char, between two non-space chars
$chars = array();
$chars[] = array('آ', 'ﺂ', 'آ', 'ﺂ');
$chars[] = array('أ', 'ﺄ', 'ﺃ', 'ﺄ');
$chars[] = array('إ', 'ﺈ', 'ﺇ', 'ﺈ');
$chars[] = array('ا', 'ﺎ', 'ا', 'ﺎ');
$chars[] = array('ب', 'ﺐ', 'ﺑ', 'ﺒ');
$chars[] = array('پ', 'ﭗ', 'ﭘ', 'ﭙ');
$chars[] = array('ت', 'ﺖ', 'ﺗ', 'ﺘ');
$chars[] = array('ث', 'ﺚ', 'ﺛ', 'ﺜ');
$chars[] = array('ج', 'ﺞ', 'ﺟ', 'ﺠ');
$chars[] = array('چ', 'ﭻ', 'ﭼ', 'ﭽ');
$chars[] = array('ح', 'ﺢ', 'ﺣ', 'ﺤ');
$chars[] = array('خ', 'ﺦ', 'ﺧ', 'ﺨ');
$chars[] = array('د', 'ﺪ', 'ﺩ', 'ﺪ');
$chars[] = array('ذ', 'ﺬ', 'ﺫ', 'ﺬ');
$chars[] = array('ر', 'ﺮ', 'ﺭ', 'ﺮ');
$chars[] = array('ز', 'ﺰ', 'ﺯ', 'ﺰ');
$chars[] = array('ژ', 'ﮋ', 'ﮊ', 'ﮋ');
$chars[] = array('س', 'ﺲ', 'ﺳ', 'ﺴ');
$chars[] = array('ش', 'ﺶ', 'ﺷ', 'ﺸ');
$chars[] = array('ص', 'ﺺ', 'ﺻ', 'ﺼ');
$chars[] = array('ض', 'ﺾ', 'ﺿ', 'ﻀ');
$chars[] = array('ط', 'ﻂ', 'ﻃ', 'ﻄ');
$chars[] = array('ظ', 'ﻆ', 'ﻇ', 'ﻈ');
$chars[] = array('ع', 'ﻊ', 'ﻋ', 'ﻌ');
$chars[] = array('غ', 'ﻎ', 'ﻏ', 'ﻐ');
$chars[] = array('ف', 'ﻒ', 'ﻓ', 'ﻔ');
$chars[] = array('ق', 'ﻖ', 'ﻗ', 'ﻘ');
$chars[] = array('ک', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('ك', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('گ', 'ﮓ', 'ﮔ', 'ﮕ');
$chars[] = array('ل', 'ﻞ', 'ﻟ', 'ﻠ');
$chars[] = array('م', 'ﻢ', 'ﻣ', 'ﻤ');
$chars[] = array('ن', 'ﻦ', 'ﻧ', 'ﻨ');
$chars[] = array('و', 'ﻮ', 'ﻭ', 'ﻮ');
$chars[] = array('ؤ', 'ﺆ', 'ﺅ', 'ﺆ');
$chars[] = array('ی', 'ﯽ', 'ﯾ', 'ﯿ');
$chars[] = array('ي', 'ﻲ', 'ﻳ', 'ﻴ');
$chars[] = array('ئ', 'ﺊ', 'ﺋ', 'ﺌ');
$chars[] = array('ه', 'ﻪ', 'ﮬ', 'ﮭ');
$chars[] = array('ۀ', 'ﮥ', 'ﮬ', 'ﮭ');
$chars[] = array('ة', 'ﺔ', 'ﺗ', 'ﺘ');
$chars[] = array(' ', ' ', ' ', ' ');
$chars[] = array('0', '0', '0', '0');
$chars[] = array('1', '1', '1', '1');
$chars[] = array('2', '2', '2', '2');
$chars[] = array('3', '3', '3', '3');
$chars[] = array('4', '4', '4', '4');
$chars[] = array('5', '5', '5', '5');
$chars[] = array('6', '6', '6', '6');
$chars[] = array('7', '7', '7', '7');
$chars[] = array('8', '8', '8', '8');
$chars[] = array('9', '9', '9', '9');

$string = $result;
$len = mb_strlen($string, 'utf-8');
$result = '';
$buffer = array();


for ($i = 0; $i < $len; $i++) {
$previous_char = $i > 0 ? mb_substr($string, $i - 1, 1, 'utf-8') : '';
$current_char = mb_substr($string, $i, 1, 'utf-8');
$next_char = $i < ($len - 1) ? mb_substr($string, $i + 1, 1, 'utf-8') : '';

$in_array = false;
foreach ($chars as $char) {
if (in_array($current_char, $char)) {
$in_array = true;
if (!in_array($next_char, $spaces_after) && !in_array($previous_char, $spaces_before)) {
if ($current_char == ' ') {
if (!in_farsi_array($chars, $next_char) && !in_farsi_array($chars, $previous_char))
$in_array = false;
else
$result .= $char[3];
} else
$result .= $char[3];
} elseif (!in_array($previous_char, $spaces_before)) {
$result .= $char[2];
}
elseif (!in_array($next_char, $spaces_after)) {
$result .= $char[1];
}
else {
$result .= $char[0];
}
continue;
}
}
if (!$in_array) {
$buffer[] = $current_char;
$in_array = false;
} else {
$result .= implode('', array_reverse($buffer));
$buffer = array();
}
}
if (!empty($buffer))
$result .= implode('', array_reverse($buffer));

return $result;
}

function in_farsi_array(&$farsi, $text)
{
foreach ($farsi as $t) {
if (in_array($text, $t))
return true;
}
return false;
}

naser13
شنبه 18 خرداد 1392, 12:22 عصر
Warning: imagettfbbox() [function.imagettfbbox]: any2eucjp(): something happen in E:\xampp\htdocs\faimage\faimage\index.php on line 136

Warning: imagettftext() [function.imagettftext]: any2eucjp(): something happen in E:\xampp\htdocs\faimage\faimage\index.php on line 137

Warning: Cannot modify header information - headers already sent by (output started at E:\xampp\htdocs\faimage\faimage\index.php:136) in E:\xampp\htdocs\sobhansoft\quota\faimage\faimage\i ndex.php on line 138
‰PNG  IHDR,ÈݽK–IDATxœíÙOh×uÇñïúå6Æ Ööc bBèr·¼Yø<ÌÔƒQ;Š¤`‡ô¢—uØIªCF”‡Ýü]&;'æPå¥VÊí'nΦ[‡"v°?“µ×o¿=‡ßåûÏû÷ýòäóýñkX( €œgÒÀF'B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„°gÓüi°i°ÜS~â¥û÷ÏΝýï˪?V+ý »ßÝÝúÆÖC_j.7¯ú«¾l¹Zžó)¾Îrëån ¬±Z‰°s[çñï?ñÒ…Þ +ZVé¯tnëüíackcC©!=ÔÆÒûNoQ‹ ‹&ls{¥¿²ôxÉSøõaù¥r¹§|ó³›»>Ø5vq¬gwOz¢ grlräôÈÄ×¥ÆRÓsMEQ,>Z,•Jé¹jW½½ŽEÑ÷yߍOo 6NÝšÚ÷ñ¾ô8ËÂÜÂÐî¡öÛOŽŸ<3{æHåHz¢u ÞN¢(¶¼¾åԝS³wf;¶v¤gÙp¦Ç§ç«ó{Î íiéjIϲnÔáIXE©©¤ÀˆrOyS˦ëŸ\Ÿþaz| xüò»—Ó­µrVªþÝ5÷~¾·Òek°Åÿ7p-Ïù¯ËšÚ›uøÊ{W®ž»Úýj÷Ž·vL~;¹Ò]–‹?Ž5Ð0°4Ú(êõuÖB˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„‰ÂDa"„0B˜!L„&B!„ý¿¢}d¤IEND

ایرور میده

naser13
شنبه 18 خرداد 1392, 12:55 عصر
ی , ه هم مشکل داره

naser13
شنبه 18 خرداد 1392, 14:21 عصر
درستش کردم ولی یه مشکل هنوزم دارم چطوری حرف دیگه رو اضافه کنم , ><)( ".

ravand
دوشنبه 24 شهریور 1393, 14:43 عصر
من از این تابع استفاده کردم تابع خوبیه. ولی یه مشکلی داره اونم اینکه وقتی یه متن فارسی رو مثلاً ش؟ بهش میدی در خروجی اینطوری برات نمایش میده: ؟ش
برای اینکار باید دستور زیر رو بهش داد:

<div style=direction:rtl;>ش؟</div>
ولی چون من میخوام روی عکس نمایش بدم نمیشه این کد بالا رو بهش داد. کسی راه حلی نداره؟
متشکرم.

aalmair
دوشنبه 24 شهریور 1393, 21:26 عصر
http://barnamenevis.org/showthread.php?450583-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-gd

ravand
دوشنبه 24 شهریور 1393, 21:36 عصر
http://barnamenevis.org/showthread.php?450583-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-gd
من از برنامه ی شما استفاده کردم و فقط کلمه ی آرش رو درست نشون میده و هر چی می نویسم فاصله میذاره. توی اون تاپیک گفته بودید که فونت رو عوض کنید چه فونتی بذارم که مشکلی نداشته باشه؟

exlord
سه شنبه 25 شهریور 1393, 09:16 صبح
ی , ه هم مشکل داره
من تست کردم مشکلی نمیبینم ... شما یه کلمه یا جمله که توش مشکل دارین بدین تا بررسی کنم

درستش کردم ولی یه مشکل هنوزم دارم چطوری حرف دیگه رو اضافه کنم , ><)( ".
مشکل . و " و ' رو حل کردم ولی برای جایجایی ><)( تو فارسی باید کد رو خیلی تغییر بدیم ... بازم وقت کردم بررسی میکنم

من از این تابع استفاده کردم تابع خوبیه. ولی یه مشکلی داره اونم اینکه وقتی یه متن فارسی رو مثلاً ش؟ بهش میدی در خروجی اینطوری برات نمایش میده: ؟ش
؟ هم اضافه شد



<?php
/**
* Created by PhpStorm.
* User: Exlord (adeli.farhad@gmail.com)
* Date: 9/16/14
* Time: 9:20 AM
*/
function farsi_correct($string)
{
// Reverse the string
$len = mb_strlen($string, 'utf-8');
$result = '';
for ($i = ($len - 1); $i >= 0; $i--) {
$result .= mb_substr($string, $i, 1, 'utf-8');
}
// These chars work as space when a character comes after them, so the next character will not connect to them
$spaces_after = array('', ' ', 'ا', 'آ', 'أ', 'إ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'و', 'ؤ', '?', '؟', ')', '(', '"', "'", '<', '>', '.');
// These chars work as space when a character comes before them, so the previous character will not connect to them
$spaces_before = array('', ' ', '?', '؟', ')', '(', '"', "'", '<', '>', '.');
// Persian chars with their different styles at different positions:
// Alone, After a non-space char, Before a non-space char, between two non-space chars
$chars = array();
$chars[] = array('آ', 'ﺂ', 'آ', 'ﺂ');
$chars[] = array('أ', 'ﺄ', 'ﺃ', 'ﺄ');
$chars[] = array('إ', 'ﺈ', 'ﺇ', 'ﺈ');
$chars[] = array('ا', 'ﺎ', 'ا', 'ﺎ');
$chars[] = array('ب', 'ﺐ', 'ﺑ', 'ﺒ');
$chars[] = array('پ', 'ﭗ', 'ﭘ', 'ﭙ');
$chars[] = array('ت', 'ﺖ', 'ﺗ', 'ﺘ');
$chars[] = array('ث', 'ﺚ', 'ﺛ', 'ﺜ');
$chars[] = array('ج', 'ﺞ', 'ﺟ', 'ﺠ');
$chars[] = array('چ', 'ﭻ', 'ﭼ', 'ﭽ');
$chars[] = array('ح', 'ﺢ', 'ﺣ', 'ﺤ');
$chars[] = array('خ', 'ﺦ', 'ﺧ', 'ﺨ');
$chars[] = array('د', 'ﺪ', 'ﺩ', 'ﺪ');
$chars[] = array('ذ', 'ﺬ', 'ﺫ', 'ﺬ');
$chars[] = array('ر', 'ﺮ', 'ﺭ', 'ﺮ');
$chars[] = array('ز', 'ﺰ', 'ﺯ', 'ﺰ');
$chars[] = array('ژ', 'ﮋ', 'ﮊ', 'ﮋ');
$chars[] = array('س', 'ﺲ', 'ﺳ', 'ﺴ');
$chars[] = array('ش', 'ﺶ', 'ﺷ', 'ﺸ');
$chars[] = array('ص', 'ﺺ', 'ﺻ', 'ﺼ');
$chars[] = array('ض', 'ﺾ', 'ﺿ', 'ﻀ');
$chars[] = array('ط', 'ﻂ', 'ﻃ', 'ﻄ');
$chars[] = array('ظ', 'ﻆ', 'ﻇ', 'ﻈ');
$chars[] = array('ع', 'ﻊ', 'ﻋ', 'ﻌ');
$chars[] = array('غ', 'ﻎ', 'ﻏ', 'ﻐ');
$chars[] = array('ف', 'ﻒ', 'ﻓ', 'ﻔ');
$chars[] = array('ق', 'ﻖ', 'ﻗ', 'ﻘ');
$chars[] = array('ک', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('ك', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('گ', 'ﮓ', 'ﮔ', 'ﮕ');
$chars[] = array('ل', 'ﻞ', 'ﻟ', 'ﻠ');
$chars[] = array('م', 'ﻢ', 'ﻣ', 'ﻤ');
$chars[] = array('ن', 'ﻦ', 'ﻧ', 'ﻨ');
$chars[] = array('و', 'ﻮ', 'ﻭ', 'ﻮ');
$chars[] = array('ؤ', 'ﺆ', 'ﺅ', 'ﺆ');
$chars[] = array('ی', 'ﯽ', 'ﯾ', 'ﯿ');
$chars[] = array('ي', 'ﻲ', 'ﻳ', 'ﻴ');
$chars[] = array('ئ', 'ﺊ', 'ﺋ', 'ﺌ');
$chars[] = array('ه', 'ﻪ', 'ﮬ', 'ﮭ');
$chars[] = array('ۀ', 'ﮥ', 'ﮬ', 'ﮭ');
$chars[] = array('ة', 'ﺔ', 'ﺗ', 'ﺘ');
$chars[] = array(' ', ' ', ' ', ' ');
$chars[] = array('0', '0', '0', '0');
$chars[] = array('1', '1', '1', '1');
$chars[] = array('2', '2', '2', '2');
$chars[] = array('3', '3', '3', '3');
$chars[] = array('4', '4', '4', '4');
$chars[] = array('5', '5', '5', '5');
$chars[] = array('6', '6', '6', '6');
$chars[] = array('7', '7', '7', '7');
$chars[] = array('8', '8', '8', '8');
$chars[] = array('9', '9', '9', '9');
$chars[] = array('؟', '؟', '؟', '؟');

$string = $result;
$len = mb_strlen($string, 'utf-8');
$result = array();
$buffer = array();


for ($i = 0; $i < $len; $i++) {
$previous_char = $i > 0 ? mb_substr($string, $i - 1, 1, 'utf-8') : '';
$current_char = mb_substr($string, $i, 1, 'utf-8');
$next_char = $i < ($len - 1) ? mb_substr($string, $i + 1, 1, 'utf-8') : '';

$in_array = false;
foreach ($chars as $char) {
if (in_array($current_char, $char)) {
$in_array = true;
if (!in_array($next_char, $spaces_after) && !in_array($previous_char, $spaces_before)) {
if ($current_char == ' ') {
if (!in_farsi_array($chars, $next_char) && !in_farsi_array($chars, $previous_char))
$in_array = false;
else
$result[] = $char[3];
} else
$result[] = $char[3];
} elseif (!in_array($previous_char, $spaces_before)) {
$result[] = $char[2];
} elseif (!in_array($next_char, $spaces_after)) {
$result[] = $char[1];
} else {
$result[] = $char[0];
}
continue;
}
}
if (!$in_array) {
$buffer[] = $current_char;
} else {
$lastChar = array_pop($result);
$result = array_merge($result, $buffer);
$result[] = $lastChar;
$buffer = array();
}
$in_array = false;
}

if (count($buffer))
$result = array_merge($result, $buffer);

return implode('', $result);
}

function in_farsi_array(&$farsi, $text)
{
foreach ($farsi as $t) {
if (in_array($text, $t))
return true;
}
return false;
}


$string = isset($_GET['string']) ? farsi_correct($_GET['string']) : '';
$w = 300;
$h = 200;
$im = imagecreatetruecolor($w, $h);
$c_green = imagecolorallocate($im, 127, 255, 127);
$c_black = imagecolorallocate($im, 0, 0, 0);
imagefill($im, ceil($w / 2), ceil($h / 2), $c_green);
$box = imagettfbbox(10, 0, 'tahoma.ttf', $string);
imagettftext($im, 10, 0, ($w - $box[4]) / 2, ($h - $box[5]) / 2, $c_black, 'tahoma.ttf', $string);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);

ravand
سه شنبه 25 شهریور 1393, 10:09 صبح
از جوابتون ممنونم ولی این راه حلش نیست. که برخی حروف رو جداگانه درست کنیم. منم تونستم بیام و بین حرف مثلاً ش و علامت سوال فاصله ایجاد کنم و این مشکل حل شد. یعنی این دو تا روش با هم برق داره:
ش ؟
ش؟
ولی مشکل فقط این علامت سوال نیست مثلا حرف علامت ! هم هست. اگه میشد قبل از متغییر $string مقدادیر داخلش رو با کمک direction:rtl از راست به چپ می کردیم بهتر بود.

ravand
چهارشنبه 26 شهریور 1393, 14:09 عصر
بررسی کردم دیدم از این برنامه ای که شما نوشتید بهتر دیگه پیدا نمیشه :لبخند:
برای قسمت علامت تعجبم یه همین ارایه رو اضافه کنیم خوبه:

$chars[] = array('!', '!', '!', '!');
دیگه مشکلات دیگه اش رو نمیدونم. ولی هر چی هست از برنامه های دیگه ای که دیدم بهتره.
متشکرم.

hamidhassas
دوشنبه 31 شهریور 1393, 09:34 صبح
آقا دم همگی گرم خیلی با حالین من کل کد رو با توجه به کد های دوستان یکجا به صورت زیر جمع کردم و بعد تست کردم نتیجه شد مثل زیر لطفا راهنمایی کنید



<?php
/** * Created by PhpStorm. * User: Exlord (adeli.farhad@gmail.com) * Date: 9/16/14 * Time: 9:20 AM */
function farsi_correct($string)
{
// Reverse the string
$len = mb_strlen($string, 'utf-8');
$result = ''; for ($i = ($len - 1); $i >= 0; $i--)
{
$result .= mb_substr($string, $i, 1, 'utf-8');
}
// These chars work as space when a character comes after them, so the next character will not connect to them
$spaces_after = array('', ' ', 'ا', 'آ', 'أ', 'إ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'و', 'ؤ', '?', '؟', ')', '(', '"', "'", '<', '>', '.');
// These chars work as space when a character comes before them, so the previous character will not connect to them
$spaces_before = array('', ' ', '?', '؟', ')', '(', '"', "'", '<', '>', '.');
// Persian chars with their different styles at different positions:
// Alone, After a non-space char, Before a non-space char, between two non-space chars
$chars = array();
$chars[] = array('آ', 'ﺂ', 'آ', 'ﺂ');
$chars[] = array('أ', 'ﺄ', 'ﺃ', 'ﺄ');
$chars[] = array('إ', 'ﺈ', 'ﺇ', 'ﺈ');
$chars[] = array('ا', 'ﺎ', 'ا', 'ﺎ');
$chars[] = array('ب', 'ﺐ', 'ﺑ', 'ﺒ');
$chars[] = array('پ', 'ﭗ', 'ﭘ', 'ﭙ');
$chars[] = array('ت', 'ﺖ', 'ﺗ', 'ﺘ');
$chars[] = array('ث', 'ﺚ', 'ﺛ', 'ﺜ');
$chars[] = array('ج', 'ﺞ', 'ﺟ', 'ﺠ');
$chars[] = array('چ', 'ﭻ', 'ﭼ', 'ﭽ');
$chars[] = array('ح', 'ﺢ', 'ﺣ', 'ﺤ');
$chars[] = array('خ', 'ﺦ', 'ﺧ', 'ﺨ');
$chars[] = array('د', 'ﺪ', 'ﺩ', 'ﺪ');
$chars[] = array('ذ', 'ﺬ', 'ﺫ', 'ﺬ');
$chars[] = array('ر', 'ﺮ', 'ﺭ', 'ﺮ');
$chars[] = array('ز', 'ﺰ', 'ﺯ', 'ﺰ');
$chars[] = array('ژ', 'ﮋ', 'ﮊ', 'ﮋ');
$chars[] = array('س', 'ﺲ', 'ﺳ', 'ﺴ');
$chars[] = array('ش', 'ﺶ', 'ﺷ', 'ﺸ');
$chars[] = array('ص', 'ﺺ', 'ﺻ', 'ﺼ');
$chars[] = array('ض', 'ﺾ', 'ﺿ', 'ﻀ');
$chars[] = array('ط', 'ﻂ', 'ﻃ', 'ﻄ');
$chars[] = array('ظ', 'ﻆ', 'ﻇ', 'ﻈ');
$chars[] = array('ع', 'ﻊ', 'ﻋ', 'ﻌ');
$chars[] = array('غ', 'ﻎ', 'ﻏ', 'ﻐ');
$chars[] = array('ف', 'ﻒ', 'ﻓ', 'ﻔ');
$chars[] = array('ق', 'ﻖ', 'ﻗ', 'ﻘ');
$chars[] = array('ک', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('ك', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('گ', 'ﮓ', 'ﮔ', 'ﮕ');
$chars[] = array('ل', 'ﻞ', 'ﻟ', 'ﻠ');
$chars[] = array('م', 'ﻢ', 'ﻣ', 'ﻤ');
$chars[] = array('ن', 'ﻦ', 'ﻧ', 'ﻨ');
$chars[] = array('و', 'ﻮ', 'ﻭ', 'ﻮ');
$chars[] = array('ؤ', 'ﺆ', 'ﺅ', 'ﺆ');
$chars[] = array('ی', 'ﯽ', 'ﯾ', 'ﯿ');
$chars[] = array('ي', 'ﻲ', 'ﻳ', 'ﻴ');
$chars[] = array('ئ', 'ﺊ', 'ﺋ', 'ﺌ');
$chars[] = array('ه', 'ﻪ', 'ﮬ', 'ﮭ');
$chars[] = array('ۀ', 'ﮥ', 'ﮬ', 'ﮭ');
$chars[] = array('ة', 'ﺔ', 'ﺗ', 'ﺘ');
$chars[] = array(' ', ' ', ' ', ' ');
$chars[] = array('0', '0', '0', '0');
$chars[] = array('1', '1', '1', '1');
$chars[] = array('2', '2', '2', '2');
$chars[] = array('3', '3', '3', '3');
$chars[] = array('4', '4', '4', '4');
$chars[] = array('5', '5', '5', '5');
$chars[] = array('6', '6', '6', '6');
$chars[] = array('7', '7', '7', '7');
$chars[] = array('8', '8', '8', '8');
$chars[] = array('9', '9', '9', '9');
$chars[] = array('؟', '؟', '؟', '؟');
$chars[] = array('!', '!', '!', '!');
$string = $result;
$len = mb_strlen($string, 'utf-8');
$result = array();
$buffer = array();
for ($i = 0; $i < $len; $i++)
{
$previous_char = $i > 0 ? mb_substr($string, $i - 1, 1, 'utf-8') : '';
$current_char = mb_substr($string, $i, 1, 'utf-8');
$next_char = $i < ($len - 1) ? mb_substr($string, $i + 1, 1, 'utf-8') : '';
$in_array = false;
foreach ($chars as $char)
{
if (in_array($current_char, $char))
{
$in_array = true;
if (!in_array($next_char, $spaces_after) && !in_array($previous_char, $spaces_before))
{
if ($current_char == ' ')
{
if (!in_farsi_array($chars, $next_char) && !in_farsi_array($chars, $previous_char))
{
$in_array = false;
}
else
{
$result[] = $char[3];
}
}
else
{
$result[] = $char[3];
}
}
elseif (!in_array($previous_char, $spaces_before))
{
$result[] = $char[2];
}
elseif (!in_array($next_char, $spaces_after))
{
$result[] = $char[1];
}
else
{
$result[] = $char[0];
}
continue;
}
}
if (!$in_array)
{
$buffer[] = $current_char;
}
else
{
$lastChar = array_pop($result);
$result = array_merge($result, $buffer);
$result[] = $lastChar;
$buffer = array();
}
$in_array = false;
}
if (count($buffer))
$result = array_merge($result, $buffer);
return implode('', $result);
}
function in_farsi_array(&$farsi, $text)
{
foreach ($farsi as $t)
{
if (in_array($text, $t))
return true;
}
return false;
}
$string = isset($_GET['string']) ? farsi_correct($_GET['string']) : '';
$w = 300;
$h = 200;
$im = imagecreatetruecolor($w, $h);
$c_green = imagecolorallocate($im, 127, 255, 127);
$c_black = imagecolorallocate($im, 0, 0, 0);
imagefill($im, ceil($w / 2), ceil($h / 2), $c_green);
$box = imagettfbbox(10, 0, 'tahoma.ttf', $string);
imagettftext($im, 10, 0, ($w - $box[4]) / 2, ($h - $box[5]) / 2, $c_black, 'tahoma.ttf', $string);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>

اطلاعات رو به صورت زیر ارسال کردم


http://localhost/demo/faimage/index.php?string=In The Name Of God

حاصل شد تصویر زیر
http://upcity.ir/images2/16179844752201229896.png
بعد اطلاعات رو به صورد زیر ارسال کردم


http://localhost/demo/faimage/index.php?string=به نام خداوند جان و خرد

حاصل شد تصویر زیر
http://upcity.ir/images2/46855746283823314031.png

MMSHFE
دوشنبه 31 شهریور 1393, 09:40 صبح
باید با ctype یا iconv و... متن رو تبدیل به کدگذاری یونیکد کنید. الان ANSI دریافت شده.

hamidhassas
دوشنبه 31 شهریور 1393, 09:56 صبح
باید با ctype یا iconv و... متن رو تبدیل به کدگذاری یونیکد کنید. الان ANSI دریافت شده.


من بلد نیستم میشه راهنمایی کنید

ravand
دوشنبه 31 شهریور 1393, 10:37 صبح
من بلد نیستم میشه راهنمایی کنید
من فکر میکنم اون صفحه ای که شما باهاش مقدار رو ارسال میکنی مشکل داره. وگرنه برای من مشکلی نداشت. حتما توی اون صفحه از utf-8 استفاده نکردی.

hamidhassas
دوشنبه 31 شهریور 1393, 12:27 عصر
من فکر میکنم اون صفحه ای که شما باهاش مقدار رو ارسال میکنی مشکل داره. وگرنه برای من مشکلی نداشت. حتما توی اون صفحه از utf-8 استفاده نکردی.

من utf-8 رو با تگ متا صدا زدم ولی نمیشه

MMSHFE
دوشنبه 31 شهریور 1393, 12:30 عصر
خود فایل رو هم با کدگذاری UTF-8 without BOM ذخیره کنید.

hamidhassas
دوشنبه 31 شهریور 1393, 13:56 عصر
خود فایل رو هم با کدگذاری UTF-8 without BOM ذخیره کنید.

کردم ولی کلا از کار افتاد

terrorhell
شنبه 11 مهر 1394, 20:12 عصر
سلام مرسی ولی با حرف "ه" مشکل داره


آقا دم همگی گرم خیلی با حالین من کل کد رو با توجه به کد های دوستان یکجا به صورت زیر جمع کردم و بعد تست کردم نتیجه شد مثل زیر لطفا راهنمایی کنید



<?php
/** * Created by PhpStorm. * User: Exlord (adeli.farhad@gmail.com) * Date: 9/16/14 * Time: 9:20 AM */
function farsi_correct($string)
{
// Reverse the string
$len = mb_strlen($string, 'utf-8');
$result = ''; for ($i = ($len - 1); $i >= 0; $i--)
{
$result .= mb_substr($string, $i, 1, 'utf-8');
}
// These chars work as space when a character comes after them, so the next character will not connect to them
$spaces_after = array('', ' ', 'ا', 'آ', 'أ', 'إ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'و', 'ؤ', '?', '؟', ')', '(', '"', "'", '<', '>', '.');
// These chars work as space when a character comes before them, so the previous character will not connect to them
$spaces_before = array('', ' ', '?', '؟', ')', '(', '"', "'", '<', '>', '.');
// Persian chars with their different styles at different positions:
// Alone, After a non-space char, Before a non-space char, between two non-space chars
$chars = array();
$chars[] = array('آ', 'ﺂ', 'آ', 'ﺂ');
$chars[] = array('أ', 'ﺄ', 'ﺃ', 'ﺄ');
$chars[] = array('إ', 'ﺈ', 'ﺇ', 'ﺈ');
$chars[] = array('ا', 'ﺎ', 'ا', 'ﺎ');
$chars[] = array('ب', 'ﺐ', 'ﺑ', 'ﺒ');
$chars[] = array('پ', 'ﭗ', 'ﭘ', 'ﭙ');
$chars[] = array('ت', 'ﺖ', 'ﺗ', 'ﺘ');
$chars[] = array('ث', 'ﺚ', 'ﺛ', 'ﺜ');
$chars[] = array('ج', 'ﺞ', 'ﺟ', 'ﺠ');
$chars[] = array('چ', 'ﭻ', 'ﭼ', 'ﭽ');
$chars[] = array('ح', 'ﺢ', 'ﺣ', 'ﺤ');
$chars[] = array('خ', 'ﺦ', 'ﺧ', 'ﺨ');
$chars[] = array('د', 'ﺪ', 'ﺩ', 'ﺪ');
$chars[] = array('ذ', 'ﺬ', 'ﺫ', 'ﺬ');
$chars[] = array('ر', 'ﺮ', 'ﺭ', 'ﺮ');
$chars[] = array('ز', 'ﺰ', 'ﺯ', 'ﺰ');
$chars[] = array('ژ', 'ﮋ', 'ﮊ', 'ﮋ');
$chars[] = array('س', 'ﺲ', 'ﺳ', 'ﺴ');
$chars[] = array('ش', 'ﺶ', 'ﺷ', 'ﺸ');
$chars[] = array('ص', 'ﺺ', 'ﺻ', 'ﺼ');
$chars[] = array('ض', 'ﺾ', 'ﺿ', 'ﻀ');
$chars[] = array('ط', 'ﻂ', 'ﻃ', 'ﻄ');
$chars[] = array('ظ', 'ﻆ', 'ﻇ', 'ﻈ');
$chars[] = array('ع', 'ﻊ', 'ﻋ', 'ﻌ');
$chars[] = array('غ', 'ﻎ', 'ﻏ', 'ﻐ');
$chars[] = array('ف', 'ﻒ', 'ﻓ', 'ﻔ');
$chars[] = array('ق', 'ﻖ', 'ﻗ', 'ﻘ');
$chars[] = array('ک', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('ك', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('گ', 'ﮓ', 'ﮔ', 'ﮕ');
$chars[] = array('ل', 'ﻞ', 'ﻟ', 'ﻠ');
$chars[] = array('م', 'ﻢ', 'ﻣ', 'ﻤ');
$chars[] = array('ن', 'ﻦ', 'ﻧ', 'ﻨ');
$chars[] = array('و', 'ﻮ', 'ﻭ', 'ﻮ');
$chars[] = array('ؤ', 'ﺆ', 'ﺅ', 'ﺆ');
$chars[] = array('ی', 'ﯽ', 'ﯾ', 'ﯿ');
$chars[] = array('ي', 'ﻲ', 'ﻳ', 'ﻴ');
$chars[] = array('ئ', 'ﺊ', 'ﺋ', 'ﺌ');
$chars[] = array('ه', 'ﻪ', 'ﮬ', 'ﮭ');
$chars[] = array('ۀ', 'ﮥ', 'ﮬ', 'ﮭ');
$chars[] = array('ة', 'ﺔ', 'ﺗ', 'ﺘ');
$chars[] = array(' ', ' ', ' ', ' ');
$chars[] = array('0', '0', '0', '0');
$chars[] = array('1', '1', '1', '1');
$chars[] = array('2', '2', '2', '2');
$chars[] = array('3', '3', '3', '3');
$chars[] = array('4', '4', '4', '4');
$chars[] = array('5', '5', '5', '5');
$chars[] = array('6', '6', '6', '6');
$chars[] = array('7', '7', '7', '7');
$chars[] = array('8', '8', '8', '8');
$chars[] = array('9', '9', '9', '9');
$chars[] = array('؟', '؟', '؟', '؟');
$chars[] = array('!', '!', '!', '!');
$string = $result;
$len = mb_strlen($string, 'utf-8');
$result = array();
$buffer = array();
for ($i = 0; $i < $len; $i++)
{
$previous_char = $i > 0 ? mb_substr($string, $i - 1, 1, 'utf-8') : '';
$current_char = mb_substr($string, $i, 1, 'utf-8');
$next_char = $i < ($len - 1) ? mb_substr($string, $i + 1, 1, 'utf-8') : '';
$in_array = false;
foreach ($chars as $char)
{
if (in_array($current_char, $char))
{
$in_array = true;
if (!in_array($next_char, $spaces_after) && !in_array($previous_char, $spaces_before))
{
if ($current_char == ' ')
{
if (!in_farsi_array($chars, $next_char) && !in_farsi_array($chars, $previous_char))
{
$in_array = false;
}
else
{
$result[] = $char[3];
}
}
else
{
$result[] = $char[3];
}
}
elseif (!in_array($previous_char, $spaces_before))
{
$result[] = $char[2];
}
elseif (!in_array($next_char, $spaces_after))
{
$result[] = $char[1];
}
else
{
$result[] = $char[0];
}
continue;
}
}
if (!$in_array)
{
$buffer[] = $current_char;
}
else
{
$lastChar = array_pop($result);
$result = array_merge($result, $buffer);
$result[] = $lastChar;
$buffer = array();
}
$in_array = false;
}
if (count($buffer))
$result = array_merge($result, $buffer);
return implode('', $result);
}
function in_farsi_array(&$farsi, $text)
{
foreach ($farsi as $t)
{
if (in_array($text, $t))
return true;
}
return false;
}
$string = isset($_GET['string']) ? farsi_correct($_GET['string']) : '';
$w = 300;
$h = 200;
$im = imagecreatetruecolor($w, $h);
$c_green = imagecolorallocate($im, 127, 255, 127);
$c_black = imagecolorallocate($im, 0, 0, 0);
imagefill($im, ceil($w / 2), ceil($h / 2), $c_green);
$box = imagettfbbox(10, 0, 'tahoma.ttf', $string);
imagettftext($im, 10, 0, ($w - $box[4]) / 2, ($h - $box[5]) / 2, $c_black, 'tahoma.ttf', $string);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>

اطلاعات رو به صورت زیر ارسال کردم


http://localhost/demo/faimage/index.php?string=In The Name Of God

حاصل شد تصویر زیر
http://upcity.ir/images2/16179844752201229896.png
بعد اطلاعات رو به صورد زیر ارسال کردم


http://localhost/demo/faimage/index.php?string=به نام خداوند جان و خرد

حاصل شد تصویر زیر
http://upcity.ir/images2/46855746283823314031.png