str_replace funktioniert nicht

Alles, was PHP betrifft, kann hier besprochen werden.

str_replace funktioniert nicht

Postby yoshi80 » 21. February 2007 10:35

Hallo zusammen

ich will Datenbankeinträge nach Bestimmten Strings durchsuchen und durch andere austauschen.
Eigentlich ganz einfach doch er will nicht.

Habe folgenden Code:
Code: Select all
   foreach($entry_type_german as $key=>$data){
      if (!empty($row[$key])){
         echo ",<br></td>";
         echo "<tr><td></td><td>";
         $ausgabe = $row[$key];
         //echo "ausgabe: ".$ausgabe."<br>";
         $ausgabe=str_replace("ö","{\\\"o}",$ausgabe);
         $ausgabe=str_replace("ä","{\\\"a}",$ausgabe);
         $ausgabe=str_replace("ü","{\\\"u}",$ausgabe);
         $ausgabe=str_replace("ß","{\\s}",$ausgabe);
         $ausgabe=str_replace("Ö","{\\\"O}",$ausgabe);
         $ausgabe=str_replace("Ä","{\\\"A}",$ausgabe);
         $ausgabe=str_replace("Ü","{\\\"U}",$ausgabe);
                        //echo "ausgabe: ".$ausgabe."<br>";

         
         echo $entry_type_bibtex[$key]." = {".$ausgabe."}";   
      }
   }


Habe $ausgabe seblst auch einen String zugweisen und es hat funktioniert. Doch sobald er Strings aus der Datenbank lädt, so verändert er diese nicht mehr.
So müsste er zB beim dem String "MÄRZ" den String "M\"ARZ" erzeugen... er gibt jedoch einfach "MÄRZ" aus. Woran könnte es liegen?
Vielleicht irgendwelche Typkonventionen von wegen UTF8 oder ähnliches?
Weiss da nicht weiter

gruß Yoshi
yoshi80
 
Posts: 25
Joined: 06. December 2006 12:53

Postby Wiedmann » 21. February 2007 10:47

So müsste er zB beim dem String "MÄRZ" den String "M\"ARZ" erzeugen...

Nur so nebenbei: Für was braucht man so eine Ersetzung?

$ausgabe=str_replace("ö","{\\\"o}",$ausgabe);

Müsste das Ergebnis hier nicht {\"o} sein? (also nicht nur \"o )

BTW: anstatt 1000x str_replace(), solltest du als Parameter 2 Arrays nehmen, oder strtr() mit einem Array.

Vielleicht irgendwelche Typkonventionen von wegen UTF8 oder ähnliches?

Was meinst du damit? Wo hast du denn "utf-8"?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby yoshi80 » 21. February 2007 11:24

Nur so nebenbei: Für was braucht man so eine Ersetzung?

Wenn du mit Latex bzw Bibtex arbeitest.
Mit BIbtex kannst du das Literaturverzeichnis in einem Latexdokument anlegen. Dort müssen z.B. alle Umlaute dann entsprechen andes geschrieben werden. Nicht Ä sonder {\"A}.
Bei uns (an der UNI) kann man in einer Suchmaschine nach Literatur suchen und die Bibtex-Einträge werden automatisch angezeigt, falls du die Arbeit zietieren willst oder sonstiges.

Müsste das Ergebnis hier nicht {\"o} sein? (also nicht nur \"o )

die geschweiften Klammern müssen bei Bibtex auch rein.

Was meinst du damit? Wo hast du denn "utf-8"?

Ich hatte früher bei Latex oft Probeleme mit dem Zeichen satz (UTF8, Latin1, ...)
Ich habe mir gedacht dass vielleicht die DB einen Zeichensatz benutzt, welcher von PHP nicht ganz unterstützt wird (weiss auch nicht ob man beim MySQL so etwas einstellen kann) ... was bestimmt nicht der Fall ist. Mir ist einfach nichts anderes mehr in den Sinn gekommen woran es liegen könnte.

BTW: anstatt 1000x str_replace(), solltest du als Parameter 2 Arrays nehmen, oder strtr() mit einem Array.

jop werde ich machen
yoshi80
 
Posts: 25
Joined: 06. December 2006 12:53

Postby Wiedmann » 21. February 2007 11:33

Wenn du mit Latex bzw Bibtex arbeitest.

Ok. nicht meine Welt *g*
Wiedmann wrote:Müsste das Ergebnis hier nicht {"o} sein? (also nicht nur "o )

die geschweiften Klammern müssen bei Bibtex auch rein.

Mir ging es um das Beispiel das du angegeben hattest, was du gerne als Ergebnis hättest:
yoshi80 wrote:So müsste er zB beim dem String "MÄRZ" den String "M"ARZ" erzeugen...

(Und da seh ich keine geschweifte Klammern.)

Ich habe mir gedacht dass vielleicht die DB einen Zeichensatz benutzt, welcher von PHP nicht ganz unterstützt wird

Oder vielleicht besser gesagt: Beide Systeme verwenden verschiedene... Kannst aber nur du wissen.


Aber mal so als Test (und in der Hoffung, dass jetzt auch ein "ö" vorkommt):
Code: Select all
$ausgabe=str_replace("ö","{\\"o}",$ausgabe);

Setzte mal vor diese Zeile folgendes:
Code: Select all
echo '<pre>';
var_dump("ö");
var_dump($ausgabe);
echo '</pre>';
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby yoshi80 » 21. February 2007 12:34

(Und da seh ich keine geschweifte Klammern.)

Habe sie vergessen.

Laut phpinfo() unterstützt mein Parser beides.. also UTF8 und latin1.
Meine DB verwendet den Zeichensatz Latin1.

Habe mal probweise den String nach UTF8 konvertiert ...
und voila es klappt. Zum ausgeben muss ich es jedoch wieder nach latin1 konvertieren, da sonst nur Müll anezeigt wird.

Wieso der PHP Parser mit Latin1 nicht klar kommt is mir ein Rätsel.

thx wiedmann und einen angenehmen Tag noch
yoshi80
 
Posts: 25
Joined: 06. December 2006 12:53

Postby Wiedmann » 21. February 2007 12:39

Du solltest dein PHP-Script im Editor nicht utf8-kodiert abspeichern.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby yoshi80 » 21. February 2007 12:45

ich weiss gar nicht ob meine PHP-Skript in UTF-8 abgespeichert wird oder Latin1 bzw. welchen Zeichensatz mein Editor verwendet. Ist doch eigentlich egal oder?
Das Script wird ja korrekt ausgeführt. Nur mit den Strings aus der Datenbank hat er Probleme. Obwohl in phpinfo() steht er würde beide Zeichensätze unterstützen... komisch:-?

Oder was hast du gemeint?
yoshi80
 
Posts: 25
Joined: 06. December 2006 12:53

Postby Wiedmann » 21. February 2007 12:54

ch weiss gar nicht ob meine PHP-Skript in UTF-8 abgespeichert wird oder Latin1 bzw.

aber ich ;-) (s.o.)

Ist doch eigentlich egal oder?

Nein, ist es nicht. Du vergleichst hier (beim Ersetzten) einen utf8-kodierten String mit einem latin1-kodierten String. Da die Bitfolgen der Zeichen, gerade bei den Umlauten, unterschiedlich sind, findet er keine Übereinstimmung bei der Ersetzung.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby yoshi80 » 21. February 2007 13:00

ah alles klar. Jetzt versetehe ich!
Dann kann ich das Problem jetzt direkt and er Wurzel anpacken.
yoshi80
 
Posts: 25
Joined: 06. December 2006 12:53


Return to PHP

Who is online

Users browsing this forum: No registered users and 20 guests