2011-10-15 32 views
10

trước câu hỏi có liên quan của tôi:Lỗi khi writting tiếng Ả Rập để hình ảnh

php work with images : write complete word in arabic , ttf font

Vấn đề của tôi là:

  • Nếu tôi muốn viết احمد theo hình ảnh của nó xuất hiện như د م ح ا
  • Vâng, Tôi đã sửa nó và bây giờ đầu ra: ا ح م د

Sử dụng chức năng này:

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) ; 

} 

Nhưng vấn đề mới là:

ا ح م د

(chữ tách ra), nơi nó nên là:

احمد

Làm thế nào tôi có thể sửa chữa điều này?

+0

Xin lỗi, tôi không hiểu câu hỏi.Nếu bạn muốn 'احمد' xuất hiện dưới dạng' احمد', tại sao bạn định tuyến nó qua hàm này? – JJJ

+0

Vì nó giống như 'ا ح م د', nhưng với khoảng cách giữa các chữ cái –

+0

SO có vẻ làm xói mòn chuỗi tiếng Ả Rập, các dòng' $ f' và '$ t' không phải là cú pháp hợp lệ như được in, nếu bạn C & P thành biên tập viên bình thường họ trở lại bình thường. – Victory

Trả lời

3

bạn phải sử dụng bidi chuyển đổi tôi sử dụng nó để viết persian trong hình ảnh

<?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 <[email protected]> 
# 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 <[email protected]> 
* @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); 
} 
+0

Điều này làm việc tốt hơn cho tôi nhiều hơn giải pháp trên. Giải pháp trên với ar-php đã đưa vào một số nhân vật, đặc biệt là các chữ số không phải phương Tây được tạo bởi một ngày được định dạng bởi hệ thống Android. – blackjack75

8

cách của bạn của đảo ngược ký tự tiếng Ả Rập không đưa vào tài khoản bản chất của glyphs kết nối. Tuy nhiên, đó là mẹo hợp lệ để giải quyết vấn đề PHP/GD không tự động hỗ trợ ngôn ngữ RTL như tiếng Ả Rập.

Những gì bạn cần làm là sử dụng thư viện ar-php làm chính xác những gì bạn dự định.

Hãy chắc chắn rằngfile PHP mã hóa của bạn là trong unicode/UTF.
ví dụ: > Mở Notepad> Save As> mã hóa theo UTF-8:

enter image description here

sử dụng mẫu cho kiểu chữ Ả Rập trong PHP sử dụng 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); 
?> 

Đầu ra:

enter image description here

+0

Trong trường hợp ai đó sẵn sàng tích hợp với Laravel, hãy thêm đường dẫn tệp vào ** composer.json ** của bạn, trong phần ** "lớp học" **. [thêm thông tin] (https://laracasts.com/discuss/channels/general-discussion/include-a-non-composer-lib?page=1) – emonik

Các vấn đề liên quan