Text durch Grafiken austauschen lassen

Hallo,

ich möchte mit PHP eine Art eigene Schrift schreiben: ich habe für jeden Buchstaben eine Grafik angelegt, die nun den jeweiligen Buchstaben ersetzen soll.

Mein Ansatz hierfür ist der hier:

PHP:
<?php

# PHP beibringen, welche Buchstaben zu welcher Grafik gehören
$a = '<img src=img/font/a.png border=0 alt=a>';
$b = '<img src=img/font/b.png border=0 alt=b>';
$h = 'h';

# Text definieren

$text = 'Buch';

#Text ausgeben


#Text auseinandernehmen

if ( $text[0] == 'a' || 'A') { echo $a; } elseif ( $text[0] == 'b' || 'B') { echo $b; } elseif { ......... }

?>

Das funktioniert im Prinzip auch ganz gut, nur ist das ja wahnsinnig umständlich - da ich ja nun für jede Ziffer alle Möglichkeiten durch deklarieren muss. Hinzu kommen noch, das die Stringlänge von $text natürlich variiert, sodass ich PHP ja gar nicht sagen kann, wo es aufhören soll die Ziffern zu überprüfen.

Hat jemand eine Idee, wie man das vielleicht komfortabler lösen könnte? Ziel ist es am Ende, die Headlines eines Wordpress-Blogs mit Hilfe dieses Skrips umzuwandeln.

Wäre euch für Hilfe sehr dankbar, meine PHP Kentnisse sind recht beschränkt.

LG
 
Hallo,

als erstes wandelst du den Text so um, dass er nur noch aus Kleinbuchstaben besteht. Also alle Zeichen aufn Kleinbuchstaben formatieren.
Dann liest du die Länge des Textes aus.
Als Nächstes machst du eine Schleife von 0 bis Länge des Textes-1.
In dieser Schleife baust du ein switch-case ein:
PHP:
switch($text[$i]){
   case "a":
      echo $a;
      break;
  case "b":
     ...
}

Weiß jetzt leider nicht die Funktionen auswendig, die du benötigst um die Länge des Strings herauszufinden und den Text in Kleinbuchstaben umzuwandeln, aber dafür gibts ja google;):D..
Wenn ich was vergessen hab kannst dich ja nochmal melden.

Gruß,
warcraft9105
 
Sorry wegen Doppelpost.
Mir ist gerade noch eine kleine Optimierung eingefallen.
in dem switch-case machst du anstelle von echo $a oder so:
PHP:
echo '<img src="img/font/' . $text[$i] . '.png" border="0" alt="' . $text[$i] . '">'

Gruß,
warcraft9105
 
Hallo,

dein Problem lässt sich relativ kompakt mit einem regulären Ausdruck lösen:
PHP:
<?php

$text = 'Buch';

echo preg_replace(
	'/([A-Za-z])/',
	'<img src="img/font/\1.png" alt="\1">',
	strtolower($text));

?>

Grüße,
Matthias
 
Zunächst einmal danke für die zahlreichen Antworten.

Die Lösung über preg_replace gefällt mir am besten, wie vom Autor gesagt sehr kompakt. Funktioniert auch bestens, dankesehr!

Danke auch für den Tipp mit der Schriftdatei, yaslaw - das werde ich sicher in Zukunft noch mal brauchen können! Funktioniert in diesem konkreten Fall leider nicht, da die Schrift quasi selbstgezeichnet ist und direkt als einzelne Grafiken als Illustrator kommt. Müsste hier also erst eine Schriftart erstellen, was mir etwas zu umständlich ist.

Eine kleine Ergänzungsfrage hätte ich noch. Wie gesagt funktioniert das Ganze per preg_replace hervorragend. Nun habe ich noch einige Sonderzeichen in meine Schrift mit aufgenommen, konkret diese hier:

Code:
!?()/&%$,.-#*+@€<>=;:ß

Die sollen nun auch durch die jeweilige Grafik ersetzt werden. Ich habe dies zunächst so gelöst, sie einfach in den Zeichenbereich mit zu ergänzen - problem ist nur, dass mein Webserver probleme damit hat, Grafiken mit Dateinamen wie ?.png oder ß.png zu akzeptieren. Was darin resultiert, dass die Grafiken nicht gefunden werden.

Meine Idee war nun, diese Zeichen gesondert durch Grafiken austauschen zu lassen, die einen beliebigen Namen haben. Mein Ansatz dafür:

PHP:
<?php 

#Beispieltext
$text = 'Lorem ipsum (testeintrag?) Dies ist ein Testeintrag! 2010 # + ; / & test test';

#Sonderzeichen austauschen
$text = str_replace ("?", " <img src=\"/img/font/question.png\"> ", $text); 
...

#Alle anderen Zeichen austauschen
echo preg_replace('/([A-Za-z0-9])/u', '<img src="img/font/\1.png" alt="\1">', strtolower($text)); 

?>

Lasse ich den nachfolgenden pref_replace komplett raus, also tausche nur die Sonderzeichen aus, klappt's. Mit preg_replace wird mir der Pfad zur Bilddatei des Fragezeichens als Text ausgegeben, so als würde PHP das HTML nicht erkennen und nur Text sehen. Anscheinend kommt die preg_replace im zeitlichen Ablauf als erstes zum Zug ... kann man das irgendwie verhindern oder anders lösen?

Danke nochmals für eure Hilfe!
 
Zuletzt bearbeitet:
Moin,

*pushen ist pööööhse* :eek:

Ascii-Zeichen haben auch einen Zeichenwert, den du in PHP per [phpf]ord[/phpf] ermitteln kannst.
Es wäre also gut möglich und angesichts des aufgetretenen Problemes sinnvoll, statt des Zeichens selbst, seinen ASCII-Wert als Dateinamen zu verwenden.

Das geht so lange gut, wie du mit einem einzigen ISO-Zeichensatz auskommst.
Benötigst du Zeichen aus mehreren, könnte man sicher irgendwie den Unicode-Wert ermitteln und damit arbeiten.
 
Naja, das kommt sicher auf die Anwendung an.

Wenn man viele einzelne Texte hat, dann schlägt das Pendel auch wieder zu den einzelnen Buchstaben wenn man die Requests betrachtet.

Ich würde da eindeutig CSS-Sprites favorisieren, da hätte man in jedem Fall nur 1 Request.
 
@Sven: Danke für den Tipp, das Auslesen funktioniert ganz gut. Hast du noch einen Tipp, wie ich dem preg_replace() sagen kann, nun auch nach diesem ASCII-Code als Dateinamen zu suchen und nicht nach "?" ?

Sieht im Moment so aus:

PHP:
<?php 

$text = 'categories !?()/&%$,.-#*+@€<>0123456789=;:ß'; 
ord('?');


echo preg_replace('/([A-Za-z0-9?])/u', '<img src="img/font/\1.png" alt="\1">', strtolower($text)); 

?>
 
Zurück