2014-04-16 26 views
15

tôi biết câu hỏi này nghe có vẻ bạn kỳ lạ nhưng tôi đang rất lo lắng về nó rằng tại sao tôi đến với bạn ..làm chuỗi văn bản đọc từ phải sang trái trong imagettftext() chức năng

Tôi muốn viết một chuỗi văn bản từ phải sang trái thay vì từ trái sang phải với imagettftext(); chức năng

Tôi đọc trong teh thủ rằng biến góc điều khiển này, nó nói rằng góc 0 có nghĩa là trái sang phải, vì vậy tôi cố gắng 180, 360 nhưng không có gì xảy ra

góc gì tôi cần phải đặt nó để có được nó để viết nó phải sang trái

tôi viết một chuỗi văn bản hebrew với một font.ttf hỗ trợ nhân vật hebrew

<?php 
$white = imagecolorallocate($background, 255, 255, 255); 
$fontfile = "davidtr.ttf"; 
$string = "מחלדגכ"; 
imagettftext($background, 12, 360, 3, 17, $white, $fontfile, $string); 

?> 

tôi cũng sử dụng chức năng này strrev(),

$white = imagecolorallocate($background, 255, 255, 255); 
$fontfile = "davidtr.ttf"; 
$string = strrev("עברית"); 
//imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function'); 
imagettftext($background, 12, 0, 3, 17, $white, $fontfile, $string); 

nay là văn bản được hơi say lên vào hình ảnh một số chữ cái là hộp trắng

sau đó tôi sử dụng chức năng này:

function utf8_strrev($str){ 
    preg_match_all('/./us', $str, $ar); 
    return join('',array_reverse($ar[0])); 
} 

Nó đã giúp tôi rất nhiều, nhưng bây giờ nó cũng đảo ngược số nguyên

$string = "מחל 65 דגכ"; 
echo utf8_strrev($string); 
//Now string revered but 65 converted to 56 

Bạn có thể vui lòng cho tôi giải pháp tốt hơn mà chỉ có các ký tự quay trở lại không phải là số nguyên không ..

Cảm ơn trước vì tôi biết một số nhà phát triển sẽ giúp tôi.

+0

Tôi chưa bao giờ tuyệt vời với biểu thức thông thường; Tôi có nhiều hơn một "vòng lặp qua chuỗi" anh chàng kinda. Nhưng khái niệm này có vẻ như thế này: sử dụng hàm utf8_strrev của bạn để đảo ngược toàn bộ điều, sau đó cô lập từng chuỗi số liên tiếp trong chuỗi và áp dụng utf8_strrev cho chúng (trong chuỗi). Tôi có thể làm điều đó dễ dàng thông qua một vòng lặp, nhưng tôi có lẽ sẽ nhận được một loạt các phiếu bầu. ;) – BrettFromLA

Trả lời

-3

Cách đơn giản nhất có thể không thực hiện được điều này ở phía PHP. Tôi sẽ đề nghị bạn kiểm tra http://www.codekhan.com/2012/01/how-to-use-bdo-tag-in-html5.html và xem liệu nó có đáp ứng nhu cầu của bạn hay không.

Ở phía HTML của mọi thứ, bạn sẽ bao gồm văn bản chỉ có chữ hebrew bên trong khối rtl (như được thấy trong liên kết) mà không chuyển đổi dữ liệu LTR thực hoặc văn bản khác trên trang của bạn.

5

Bạn có thể thay đổi utf8_strrev() như thế:

function utf8_strrev($str){ 
    preg_match_all('/([^\d]|\d+)/us', $str, $ar); 
    return join('',array_reverse($ar[0])); 
} 

Bằng cách đó bạn kết hợp tất cả những gì không phải là một chữ số hoặc tất cả mọi thứ đó là một chuỗi các chữ số.

Vì vậy, chuỗi "một 123 hai" sẽ dẫn đến chuỗi "nợ 123 eno".

Mảng $ ar bên utf8_strrev() sẽ như thế nào mà sau khi preg_match_all():

[0] => o 
[1] => n 
[2] => e 
[3] => 
[4] => 123 
[5] => 
[6] => t 
[7] => w 
[8] => o 
0

tôi sẽ khuyên bạn sử dụng chức năng này http://php.net/manual/de/function.imagettfbbox.php

<?php 
$white = imagecolorallocate($background, 255, 255, 255); 
$fontfile = "davidtr.ttf"; 
//text how it should be displayed 
$string = "מחלדגכ"; //will result in: 
        // ------------------- 
        // |   מחלדגכ| 
        // |     | 
        // |     | 
        // ------------------- 
$helper = imageTTFBbox(12,0,$fontfile,$string); 
imagettftext($background, 12, 0, 15+imagesx($background)-abs($helper[4] - $helper[0]), 17, $white, $fontfile, $string); 
?> 

nên về cơ bản bạn tính toán độ rộng của văn bản, lấy chiều rộng của hình ảnh, trừ đi và thêm một phần đệm (15).Lưu ý rằng các văn bản, fontfile, fontsize và góc phải giống nhau cho cả imageTTFBbox và imagettftext cho nó hoạt động

Nếu bạn cũng phải đảo ngược các văn bản Tôi muốn giới thiệu các giải pháp của @Master_ex

(Mã số không xin vui lòng bình luận nếu điều đó không làm việc vì vậy tôi có thể kiểm tra nó và, tất nhiên, sửa mã)

1
<?php 

    function hebstrrev($string, $revInt = false, $encoding = 'UTF-8'){ 
    $mb_strrev = function($str) use ($encoding){return mb_convert_encoding(strrev(mb_convert_encoding($str, 'UTF-16BE', $encoding)), $encoding, 'UTF-16LE');}; 

    if(!$revInt){ 
     $s = ''; 
     foreach(array_reverse(preg_split('/(?<=\D)(?=\d)|\d+\K/', $string)) as $val){ 
     $s .= ctype_digit($val) ? $val : $mb_strrev($val); 
     } 
     return $s; 
    } else { 
     return $mb_strrev($string); 
    } 
    } 

    echo hebstrrev("מחל 65 דגכ"); // outputs: כגד 65 לחמ 
    echo hebstrrev("מחל 65 דגכ", true); // outputs: כגד 56 לחמ 

?> 

Chức năng này đảo ngược tham số tùy chọn để đảo ngược các số nguyên trong chuỗi . Nó cũng cho phép thay đổi mã hóa của chuỗi, do đó, nó phải là phổ quát, không có vấn đề gì ngôn ngữ.

0

này sẽ giúp bạn:

<?php 
$s = iconv("ISO-8859-8", "UTF-8", hebrev(iconv("UTF-8", "ISO-8859-8", $s))); 
?> 
Các vấn đề liên quan