Ошибка при написании арабского изображения

Мой предыдущий связанный вопрос:

php работать с изображениями: написать полное слово в арабском, ttf font

Моя проблема:

  • Если я хочу написать احمد в изображении, то он появится как د م ح ا
  • Ну, я исправил его и теперь вывод: ا ح م د

Используя эту функцию:

 function arab($word){ $w = explode(' ',$word) ; $f = array(array('ا','أ'),'ب','ت','ث','ج','ح','د','ذ','ر','ز','س','ش','ص','ض','ط','ظ','ع','غ','ف','ق','ك','ل','م','ن','ه','و','ى'); $t = array(array('ا_','أ_'),'ب_','ت_','ث_','ج_','ح_','د_','ذ_','ر_','ز_','س_','ش_','ص_','ض_','ط_','ظ_','ع_','غ_','ف_','ق_','ك_','ل_','م_','ن_','ه_','و_','ى_'); $my_arab = '' ; foreach($w as $wo) { $r = array() ; $wo = str_replace($f , $t ,$wo); $ne = explode('_', $wo) ; foreach($ne as $new) { $new = str_replace('_','',$new) ; array_unshift($r , $new); } $my_arab .= ' '.implode('',$r) ; } return trim($my_arab) ; } 

Но новая проблема:

ا ح م د

(отдельные буквы), где это должно быть:

احمد

Как я могу это исправить?

Solutions Collecting From Web of "Ошибка при написании арабского изображения"

Ваш способ обратить арабские символы не учитывает характер связанных глифов . Тем не менее, это эффективный способ решить проблему PHP / GD, не поддерживая автоматически языки RTL, такие как арабский.

Что вам нужно сделать, так это использовать библиотеку ar-php, которая делает именно то, что вы намеревались.

Убедитесь, что ваша кодировка PHP-файла находится в юникоде / UTF .
например> открыть Блокнот> Сохранить как> кодирование как UTF-8:

введите описание изображения здесь

Пример использования арабской типографии в PHP с использованием imagettftext :

 <?php // The text to draw require('./I18N/Arabic.php'); $Arabic = new I18N_Arabic('Glyphs'); $font = './DroidNaskh-Bold.ttf'; $text = $Arabic->utf8Glyphs('لغةٌ عربيّة'); // Create the image $im = imagecreatetruecolor(600, 300); // Create some colors $white = imagecolorallocate($im, 255, 255, 255); $grey = imagecolorallocate($im, 128, 128, 128); $black = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 599, 299, $white); // Add the text imagettftext($im, 50, 0, 90, 90, $black, $font, $text); // Using imagepng() results in clearer text compared with imagejpeg() imagepng($im, "./output_arabic_image.png"); echo 'open: ./output_arabic_image.png'; imagedestroy($im); ?> 

Выходы:

введите описание изображения здесь

вы должны использовать bidi-конвертер, я использую его для записи персидских изображений

 <?php #---------------------------------------------------------------------- # Persian Image 1 #---------------------------------------------------------------------- # Copyright (c) 2011 Saeed Arab Sheybani #---------------------------------------------------------------------- # This program is under the terms of the GENERAL PUBLIC LICENSE (GPL) # as published by the FREE SOFTWARE FOUNDATION. The GPL is available # through the world-wide-web at http://www.gnu.org/copyleft/gpl.html #---------------------------------------------------------------------- # Authors: Saeed Arab Sheybani <webrefer@Gmail.com> # Thanks to TCPDF project @ http://www.tecnick.com/ i use unicode_data.php and bidi.php from this site #---------------------------------------------------------------------- /** * A function to change persian or arabic text from its logical condition to visual * * @author Saeed Arab Sheybani <webrefer@Gmail.com> * @param string Main text you want to change it * @param boolean Apply e'raab characters or not? default is true * @param boolean Which encoding? default it "utf8" * @param boolean Do you want to change special characters like "allah" or "lam+alef" or "lam+hamza", default is true */ function Persian_image(&$str) { include_once('bidi.php'); $text = explode("\n", $str); $str = array(); foreach($text as $line){ $chars = bidi::utf8Bidi(bidi::UTF8StringToArray($line), 'R'); $line = ''; foreach($chars as $char){ $line .= bidi::unichr($char); } $str[] = $line; } $str = implode("\n", $str); } 

Я использовал эту проблему без каких-либо проблем: https://github.com/omid/Persian-Log2Vis

UPDATE: я разблокировал Persian-Log2Vis и изменил некоторые коды, чтобы нормально работать. https://github.com/tahmasebi/Persian-Log2Vis