[PHP] Bildname und dateiname

fb130868

Member
8 Juli 2008
9
0
Hallo vor weg sollte ich einen Fehler machen sorry :D

Ich habe volgendes Problem:

Ich rufe aus einer DB ein Menü auf, und dort werden Ü Ä Ö angezeigt, diesen aufruf habe ich dann nocmal über Php eingebaut damit ich ein Bildname bekomme, das sieht dann im Quelltext dann so aus <img src="/images/BAFÖG.gif" > jetzt kann ich aber nicht das bild BAFÖG.gif benennen sondern muss es in BAFOEG.gif geändert bekommen.

Kann mir da jemand Helfen Bitte

Gruß Frank
 
Umlaute und Sonderzeichen, außer "-", "_" und ".", sollten
in Dateiname sowieso vermieden werden, da sie beim
Übertragen auf andere Dateisysteme kaputt gehen können.
 
das ist schon richtig aber leider lässt es sich nicht vermeiden, bei Wörter wie z.B Bafög oder Tertiärbereich da ich in der Mitte eine Grafische Überschrift habe muss ich diesen weg leider Wählen. aber wie kann ich das Problem jetzt lösen?

Hier einmal die Zeile wo das Bild aufgrufen wird:

<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><img src="xxxx/images/<?php the_title(); ?>.gif" ></a>

Wie und Wo muss ich da jetzt was einbauen damit das geht?

Bitte um Hilfe

Gruß Frank
 
Wie wäre es z.B. mit einer neuen Funktion für die Dateinamen
in der die Umlaute ersetzt werden?
 
Das Problem steckt da im Wordpress und meines Wissensstand.
Wie sieht denn die Alternative aus? :think:

Gruß
Frank
 
Habe ich das richtig verstanden, dass du für jede Seite einen
extra grafischen Lesezeichen-Link erzeugen möchtest?
 
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><img src="xxxx/images/<?php the_title(); ?>.gif" ></a>

das Rot makierte ist der Teil wo aus einer DB das Wort BAFÖG zum beispiel, daraus wird dann BAFÖG.gif und da kommt das Problem mit dem Ö wie kann ich das in BAFoeG.gif automatisch ändern lassen.

danke für deine Hilfe
gruß Frank
 
Neue Funktion mit dem Befehl der schon in der ersten Antwort genannt wurde.
 
Hallo ich bin es leider nochmal, habe gestern versucht mit der Funktion klar zu kommen, habe da aber noch ein Problem bei gefunden.

<img src="wp-content/themes/Jugendportal-DH/images/<?php $umlaute = array("ä", "ö", "ü","Ä", "Ö", "Ü"); $onlyconsonants = str_replace($umlaute, "", "(the_title())" ); echo $onlyconsonants ?>.gif" >

bei dem Rot makierten soll der Name aus der DB gezogen werden, aber leider bekomme ich das nicht hin, habe auch schon eine $text = the_title() ; eingebaut aber leider geht dann immer noch nicht. Was mache ich Falsch? :wall:

Gruß
Frank
 
Zu dem Code sage ich an dieser Stelle mal nichts?

Also, da wird doch (aus dem Template?) "the_title()" aufgerufen - das ist vermutlich ja eine Funktion zur Ausgabe des Titels.

1. Möglichkeit:
Gehe in diese Funktion und bearbeite die Ausgabe da entsprechend mit str_replace
(kann aber sein, dass das noch wo anders verwendet wird, daher eine schlechte Idee ;) )
2. Möglichkeit
Passe die Funktion an, so das Du noch einen weiteren Parameter hast, ob Umlaute ausgegeben werden dürften oder nicht
(Find ich noch am schönsten)

3. Möglichkeit
Erstelle dir eine neue Funktion, die ähnliches wie the_title macht, aber keine Umlaute ausgibt.
(Sich wiederholender Code ist aber grundsätzlich böse ;) )

Nachteile der Lösungen, bei einem Wordpress update, musst Du die Funktion evt wieder anpassen.

4. Möglichkeit
Schreibe den Wert in eine Variable (mit: "$getTitle = the_title('', '', false);" und bearbeite diese variable dann mit str_replace und gebe sie dann an der stelle mit dem the_title per "echo $getTitle" aus.

PS: "$text = the_title() " geht nicht, weil in der Funktion per default eine Ausgabe stattfindet. Wenn Du nur den Wert haben willst, musst Du Parameter setzen.

Vermeide aber bitte umfangreichen Code mitten ins HTML zu plazieren.


Dein Replace wird auch nicht funktionieren :roll:

$searchValue = Array('ö','ü','ä'); //restliche Buchstaben analog aufnehmen
$replaceValue = Array('oe','ue','ae'); //restliche Buchstaben analog aufnehmen

$title = str_replace($searchValue, $replaceValue, $getTitle);

Edit: Hübscher gemacht ^^
Edit2: preg_replace druch str_replace ersetzt
 
Zuletzt bearbeitet:
Danke für die vielen Lösungsansätze,
habe mich für diese Variante entschieden,

<?php
$getTitle = the_title('', '', false);
echo $getTitle."<br />";
$umlaute = Array('/ä/','/ö/','/ü/','/Ä/','/Ö/','/Ü/','/ß/');
$replace = Array('ae','oe','ue','Ae','Oe','Ue','ss');
$title = preg_replace($umlaute, $replace, $getTitle);
echo $title;
?>
<img src='/images/<?php echo $title;?>.gif' ></a>

Leider zeigr er mir bei beiden echos das Ö mit an, gebe ich manuel $getTitle = BAFÖG an zeigt er mir beim ersten Echo BAF(Hüroglüfe)G an und bei dem 2. echo Hurra ein oe.

was mache ich falsch?

gruß Frank
 
Moin, ich bin mit meinem Latain auch bald am ende :wall:

Schreibe ich es so:

<?php
$getTitle = BAFÖG; //the_title('', '', false);
echo $getTitle."<br />";
$umlaute = Array('/ä/','/ö/','/ü/','/Ä/','/Ö/','/Ü/','/ß/');
$replace = Array('ae','oe','ue','Ae','Oe','Ue','ss');
$title = str_replace($umlaute, $replace, $getTitle); //preg_replace
echo $title;

gibt er die echos so aus:
str_replace.jpg


Schreibe ich es so:

<?php
$getTitle = BAFÖG; //the_title('', '', false);
echo $getTitle."<br />";
$umlaute = Array('/ä/','/ö/','/ü/','/Ä/','/Ö/','/Ü/','/ß/');
$replace = Array('ae','oe','ue','Ae','Oe','Ue','ss');
$title = preg_replace($umlaute, $replace, $getTitle); //str_replace
echo $title;
?>

Sieht es so aus:

preg_replace.jpg


Schreibe ich die $getTitle = the_title('', '', false);

Dann macht er nichts und gibt mir die Beiden BAFÖG mit Ö aus.

Es ist zum verrückt werden.

Gruß Frank
 
str_replace auch ohne "\" -also einfach ....

$umlaute = Array('ä','ö','ü','Ä','Ö','Ü','ß');
$replace = Array('ae','oe','ue','Ae','Oe','Ue','ss');
$title = str_replace($umlaute, $replace, $getTitle); //str_replace
 
Leider auch nicht, so ist es jetzt geschrieben

$getTitle = the_title('', '', false); //;
echo $getTitle."<br />";
$umlaute = Array('ä','ö','ü','Ä','Ö','Ü','ß');
$replace = Array('ae','oe','ue','Ae','Oe','Ue','ss');
$title = str_replace($umlaute, $replace, $getTitle); //str_replace //preg_replace
echo $title;
?>

und so das ergebnis:

aktuell.jpg
 
Das ist ein Zeichensatz Problem. Dein Script ist ISO 8859 kodiert, die Daten die aus der Datenbank kommen sind UTF8 kodiert. Bei normalen Zeichen stört das nicht da diese in beiden Zeichensätzen gleich sind, aber bei Umlauten gibt es probleme. Da ein ä kein ä ist. Also musst du den Zeichensatz anpassen. Entweder du speicherst deine Scripte als UTF8 ab (ohne BOM!) oder du wandelst den String vorher um.

Umwandelnt würde mit utf8_decode() gehen:

PHP:
$umlaute = Array('ä','ö','ü','Ä','Ö','Ü','ß');
$replace = Array('ae','oe','ue','Ae','Oe','Ue','ss');
$title = str_replace($umlaute, $replace, utf8_decode($getTitle));
echo $title;
 
Danke Danke,

der Tip war klasse jetzt geht es Danke Danke für alle die mit gedacht haben.

Hier der Quellcode für die Nachwelt

<?php
$getTitle = get_the_title(); //;the_title('', '', false);
$umwandeln = utf8_decode($getTitle);
$umlaute = Array('ä','ö','ü','Ä','Ö','Ü','ß');
$ersetzen = Array('ae','oe','ue','Ae','Oe','Ue','ss');
$ergebnis = str_replace($umlaute, $ersetzen, $umwandeln); //str_replace //preg_replace

?>
<img src='images/<?php echo $ergebnis;?>.gif' ></a>

Gruß Frank :pray: :dance:
 
Man könnte natürlich auch auf $_post->post_name zugreifen... das wäre die sauberste Lösung. Den Post Slug kann man nämlich nach Belieben anpassen.

Greetz

paddya