str_replace ersetzt nichts
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
code
datum
dauer
freiwillig verzichten
gemeinde
gut wurst
kodierung
liegen
machen
minute
mist
netz
problem
sonderzeichen
textdatei
umlaut
url
verschiedensten strings
zeitmessung
-
Hallo zusammen.
folgende Funktion:
function escapeToFile($word) { $word = strtolower($word); $word = str_replace('ä','ae',$word); $word = str_replace('ö','oe',$word); $word = str_replace('ü','ue',$word); $word = str_replace(' ','-',$word); $word = str_replace('ß','ss',$word); $word = preg_replace('/\\W/', '', $word); return $word; }
wird von mir baharrlich seit mehren Minuten und aufwändiger Googlesuche und verschiedensten Strings mit noch verschiedeneren Sonderzeichen und Umlauten gefüttert, gibt aber emotionslos immer exakt den String aus, der eingegeben wurde. Vom Skript her scheint ja alles in Ordnung zu sein. Kann der Fehler in irgendeiner php.Einstellung liegen? Manchmal wird zwar hier und da ein normaler Buchstabe durch strtolower klein (aber auch keine grpßen Umlaute), preg_replace macht aber dann meist noch mehr kaputt und kürzt wild um sich. Ideen?
gruß -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Kodierung war das Stichwort. Umlaute und ähnliches sind mit str_replace mist. Falls jemand vor dem selben Problem steht:
function escapeToFile($word) { $uml = utf8_decode('ä').utf8_decode('ö').utf8_decode('ü').utf8_decode('Ä').utf8_decode('Ö').utf8_decode('Ü'); $word = preg_replace('([^!a-zA-Z'.$uml.'0-9-_ ])', '', $word); $word = strtolower($word); $word = str_replace(utf8_decode('ä'),'ae',$word); $word = str_replace(utf8_decode('ö'),'oe',$word); $word = str_replace(utf8_decode('ü'),'ue',$word); $word = str_replace(utf8_decode('Ä'),'ae',$word); $word = str_replace(utf8_decode('Ö'),'oe',$word); $word = str_replace(utf8_decode('Ü'),'ue',$word); $word = str_replace(' ','-',$word); $word = str_replace(utf8_decode('ß'),'ss',$word); return $word; }
-
lan-im-netz schrieb:
aaah yo! was ist eigentlich 'ähnliches'???? no gut ... wurst!
... Umlaute und ähnliches sind mit str_replace mist...
hier kannst du die ausgabe vom deinen code und vom meinen bewundern (oberste zeile ist von dir [dauert satte 3.??x so lang und ergebnis NIX], unterste ist von mir ;).
ja und: das hier ist eine gemeinde, wo man es versucht, einander zu helfen. kann man das nicht, sollte man auf die verbreitung von bockmist (freiwillig) verzichten. (wenn auch es nicht ganz 5 gulden bringt ;) dein problem ist nicht (nur) die kodierung!!
für dich - ganz langsam - zum mitschreiben beide funktionen (mit zeitmessung):<?php error_reporting(E_ALL | E_STRICT); $word = 'aeiou-äöü-AEIOU-ÄÖÜß-ss'; $r = null; $s = microtime(true); for($i = 0; $i <100000;$i++) { $r .= escapeToFile($word); } $s = microtime(true) - $s; $e = microtime(true); for($i = 0; $i <100000;$i++) { $r .= _escapeToFile($word); } $e = microtime(true) - $e; echo "<pre><strong> escapeToFile('</strong>$word<strong>'):</strong> ".escapeToFile($word)." - (dauer: $s sec.)"; exit("<hr /><strong>_escapeToFile('</strong>$word<strong>'):</strong> "._escapeToFile($word)." - (dauer: $e sec.)"); /* ---- deine function ---- */ function escapeToFile($word) { $uml = utf8_decode('ä').utf8_decode('ö').utf8_decode('ü').utf8_decode('Ä').utf8_decode('Ö').utf8_decode('Ü'); $word = preg_replace('([^!a-zA-Z'.$uml.'0-9-_ ])', '', $word); $word = strtolower($word); $word = str_replace(utf8_decode('ä'),'ae',$word); $word = str_replace(utf8_decode('ö'),'oe',$word); $word = str_replace(utf8_decode('ü'),'ue',$word); $word = str_replace(utf8_decode('Ä'),'ae',$word); $word = str_replace(utf8_decode('Ö'),'oe',$word); $word = str_replace(utf8_decode('Ü'),'ue',$word); $word = str_replace(' ','-',$word); $word = str_replace(utf8_decode('ß'),'ss',$word); return $word; } /* ---- meine bescheidene ---- */ function _escapeToFile($word) { return str_replace( array('ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü'), array('ae', 'oe', 'ue', 'ss', 'Ae', 'Oe', 'Ue'), $word ); }
-
<?php $word = 'Heizölrückstoßabdämpfung'; $word = utf8_decode(preg_replace('#[^\pL]#u', '', $word)); $search = array( 'ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü' ); $replace = array( 'ae', 'oe', 'ue', 'ss', 'Ae', 'Oe', 'Ue' ); echo str_replace($search, $replace, $word);
Beitrag zuletzt geändert: 11.5.2013 3:01:24 von fabo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage