2014-04-16 7 views
15

Ich weiß, diese Frage klingen mag Sie seltsam, aber ich bin sehr Sorgen darüber, warum ich zu dir gekommen sind ..make Textzeichenfolge von rechts gelesen in imagettftext nach links() Funktion

Ich möchte eine Textzeichenfolge schreiben von rechts nach links statt von links nach rechts mit dem imagettftext();

Funktion

ich in Teh Handbuch zu lesen, dass die Winkelgröße steuert dieses, es heißt, dass 0 Winkel nach rechts bedeutet links, also versuchte ich 180, 360, aber nichts passiert

Welche Winkel brauche ich, um es zu bekommen es zu schreiben es richtig

nach links ich mit einem font.ttf eine hebräisch Textfolge schreibe die

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

?> 

i diese Funktion auch strrev() hebräisch-Zeichen unterstützt,

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

nun der Text auf dem Bild oben geschraubt wird einige Buchstaben sind weißen Kästen

dann habe ich diese Funktion:

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

Es mir sehr geholfen, aber jetzt ist es umgekehrt auch ganze Zahlen

Können Sie mir bitte eine bessere Lösung, dass nur hebräische Zeichen umgekehrt werden keine Ganzzahlen ..

Vielen Dank im Voraus, weil ich einige Entwickler kenne, die mir helfen werden.

+0

Ich habe mit regulären Ausdrücken nie groß gewesen; Ich bin eher ein "Loop durch die Saite". Aber das Konzept scheint das zu sein: Benutze deine Funktion utf8_strrev, um das Ganze umzukehren, dann isoliere jede zusammenhängende Reihe von Zahlen innerhalb der Kette und lege utf8_strrev auf sie an (innerhalb der Kette). Ich könnte es leicht über eine Schleife machen, aber ich würde wahrscheinlich eine Reihe von Stimmen erhalten. ;) – BrettFromLA

Antwort

-3

Der einfachste Weg ist, dies auf der PHP-Seite überhaupt nicht zu tun. Ich würde vorschlagen, Sie überprüfen http://www.codekhan.com/2012/01/how-to-use-bdo-tag-in-html5.html und sehen, ob es Ihre Bedürfnisse decken würde.

Auf der HTML-Seite der Dinge, würden Sie Ihren hebräisch-nur Text innerhalb eines RTL-Block (wie in den Link sehen), ohne die tatsächlichen LTR-Daten oder andere Texte auf Ihrer Seite zu konvertieren.

5

könnten Sie ändern utf8_strrev() wie folgt aus:

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

diese Weise können Sie alles passen, das keine Ziffer oder alles, was eine Folge von Ziffern ist.

So würde die Zeichenfolge "one 123 two" zu der Zeichenfolge "owt 123 eno" führen.

Der Array $ ar innerhalb utf8_strrev() wie die nach dem preg_match_all wäre():

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

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

so dass im Grunde Sie die Breite berechnet Mit dieser Funktion würde empfehlen, von der Text, erhalte die Breite des Bildes, subtrahiere diese und füge ein Padding hinzu (15).Beachten Sie, dass der Text, fontfile, Schriftgröße und Winkel gleich sein müssen sowohl für imagettfbbox und imagettftext dafür

zu arbeiten, wenn Sie den Text auch umkehren müssen würde ich die Lösung von @Master_ex empfehlen

(-Code nicht noch nicht getestet. Kommentar bitte, wenn das nicht so funktioniert kann ich es testen und natürlich, korrigieren sie den Code)

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 לחמ 

?> 

diese Funktion wird die Saite mit einem optionalen Parameter kehrt auch die ganzen Zahlen innerhalb der Zeichenfolge zu umkehren . Es erlaubt auch, die Codierung der Zeichenfolge zu ändern, so dass es unabhängig von der Sprache universell sein sollte.

0

Dies wird Ihnen helfen:

<?php 
$s = iconv("ISO-8859-8", "UTF-8", hebrev(iconv("UTF-8", "ISO-8859-8", $s))); 
?>