php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.10.2008, 18:26  
Benutzer
 
Registriert seit: 12.09.2008
Beiträge: 66
MatzeMuc86 befindet sich auf einem aufstrebenden Ast
Standard Umlaute und str_replace

Hallo zusammen,

ich hatte das Problem bereits schon einmal und habe es damals nicht gelöst bekommen.
Da der damalige Beitrag sehr verwirrend bzw. mit viel, teilweise falschen oder nicht funktionierendem Code versehen ist, habe ich mich entschlossen, nochmals neu zu posten. Der alte Beitrag ist hier.

Ich habe eine PHP Datei, die eine Suche in einer Datenbank durchführt.
In der Datenbank wurden alle Umlaute durch Doppelbuchstaben erstezt, also ä=> ae oder Ö=> OE.

Der Benutzer kann in einem Formular Werte eingeben, nach denen dann anschließend gefiltert wird.
D.h. alle eingegebenen Umlaute müssen ersetzt werden.

Im Head steht:
PHP-Code:
<meta charset="UTF-8">, was ich NICHT ändern kann!!! 
Bezüglich Magic Quotes habe ich folgenden Code
PHP-Code:
set_magic_quotes_runtime("0");
$magic_gpc get_magic_quotes_gpc();
$magic_runtime get_magic_quotes_runtime();
echo 
"Magic Quotes GPC: ".$magic_gpc."<br>";
echo 
"Magic Quotes Runtime: ".$magic_runtime."<br>"
und erhalte als Ausgabe:
Zitat:
Magic Quotes GPC: 0
Magic Quotes Runtime: 0
Weiter unten lese ich die Formularvariablen ein:
PHP-Code:
$input_titel $_POST['input_titel']; 
dann versuche ich die umlaute wegzubekommen:
PHP-Code:
$umlaute = array("&auml;""ö""ü","Ä","Ö","Ü","ß");
$doppelbuchstaben = array("ae""oe""ue","AE","OE","UE","ss");
$input_titel str_replace ($umlaute,$doppelbuchstaben,$input_titel); 
Leider klappt es nicht, d.h. bei der Ausgabe von $input_titel mittels folgendem Code bleibt ein Umlaute
PHP-Code:
echo $input_autor."<br>"
Weiter unten kommt dann noch das Formular:
Code:
<form name="publikationen" action="<?php echo $_SERVER['PHP_SELF']."#filter"; ?>" method="post"  <?php if ($iframe == 1) echo "style=\"width: 465px;\""; ?> accept-charset="UTF-8">
<input value="<?php echo $input_titel; ?>" maxlength="100" size="30" name="input_titel">
<input name="Filterung durchf&uuml;hren" value="Filterung durchf&uuml;hren" type="submit">
</form>
Was läuft da schief?

Danke
MatzeMuc86
MatzeMuc86 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.10.2008, 23:00  
Neuer Benutzer
 
Registriert seit: 17.10.2008
Beiträge: 21
PHP-Kenntnisse:
Fortgeschritten
Robsen befindet sich auf einem aufstrebenden Ast
Standard

Wenn du die Daten in UTF-8 losschickst, dann kommt str_replace damit nicht klar. Das liegt ganz einfach daran, dass str_replace für jedes Zeichen lediglich ein Byte vorsieht. Multibyte Charsets (z.B. UTF-8 ) machen an dieser Stelle Ärger, da hier ein ä eben nicht genau ein Zeichen lang ist sondern 2.

Falls dein Hoster die Multibytefunktionen aktiviert hat, benutze doch einfach mb_str_replace. Andernfalls mußt du die Eingabe zunächst nach ISO kodieren, und dann die Umlaute mit str_replace ersetzen. Eine anschließende Konvertierung nach UTF-8 kannste dir dann aber sparen, da du ja keine Umlaute mehr im Text drin hast - ist also ASCII.

Grüße
Robsen

Geändert von Robsen (17.10.2008 um 23:04 Uhr).
Robsen ist offline  
Alt 17.10.2008, 23:01  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Zitat:
Eine anschließende Konvertierung nach UTF-8 kannste dir dann aber sparen, da du ja keine Umlaute mehr im Text drin hast - ist also ASCII.
So schnell würde ich nicht urteilen. Es gibt auch genügend andere Sonderzeichen. Die deutschen Umlaute sind bei weitem nicht die Einzigen.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline  
Alt 17.10.2008, 23:05  
Neuer Benutzer
 
Registriert seit: 17.10.2008
Beiträge: 21
PHP-Kenntnisse:
Fortgeschritten
Robsen befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Manko10 Beitrag anzeigen
So schnell würde ich nicht urteilen. Es gibt auch genügend andere Sonderzeichen. Die deutschen Umlaute sind bei weitem nicht die Einzigen.
Ja das stimmt natürlich.
Robsen ist offline  
Alt 18.10.2008, 10:02  
Benutzer
 
Registriert seit: 12.09.2008
Beiträge: 66
MatzeMuc86 befindet sich auf einem aufstrebenden Ast
Standard

OK, also mit mb_str_replace geht es leider nicht.
Da führt er das Script bis zu der Stelle aus und dann kommt kein weiterer Code.

Mit welchem befehl wandle ich denn von UTF nach ISO bzw. wieder zurück um?

Danke

MatzeMuc86
MatzeMuc86 ist offline  
Alt 18.10.2008, 10:28  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.168
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

utf8_decode, utf8_encode

Aber wieso willst Du überhaupt umwandeln ?

Gefallen Dir die Umlaute nicht ?

Innerhalb einer Anwendung brauch man normalerweise ncht
umwandeln, nur wenn Daten nach außen gehn oder von dort kommen
(Schnittstellen).
Koala ist offline  
Alt 20.10.2008, 09:03  
Benutzer
 
Registriert seit: 12.09.2008
Beiträge: 66
MatzeMuc86 befindet sich auf einem aufstrebenden Ast
Standard

Also ich habe es so umgebaut:
PHP-Code:
$input_titel str_replace ($umlaute,$doppelbuchstaben,utf8_decode($input_titel)); 
damit funktioniert es jetzt.
im formular habe ich dann sicherhewitshalber nochmals utf8_encode auf die variable angewendet.

Ich brauche es deshalb, da ich eine Datenbank habe, in der Umlaute vorkommen können. bei Müller wäre das ja Ok, dann suche ich halt nach "Müller" und nach "Mueller", wenn aber 2 oder 3 Umlaute in einem Wort sind, wird das extrem kompliziert.
Daher habe ich alle umlaute aus der Datenbank entfernt und muss das dan entsprechend auch bei der Eingabe tun.
Dadurch finde ich wirklich alle Einträge.

Danke für eure Hilfe
MatzeMuc86
MatzeMuc86 ist offline  
Alt 20.10.2008, 09:04  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Was nützt einem eine Datenbank mit veränderten Namen? Das kannst Du doch nie zurückportieren. Wieso benutzt Du nicht einfach UTF-8 in der DB?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 20.10.2008, 09:19  
Benutzer
 
Registriert seit: 12.09.2008
Beiträge: 66
MatzeMuc86 befindet sich auf einem aufstrebenden Ast
Standard

Und was bringt mir das, wenn zum einen die Datenbank nicht konsequent umlaute hat, wo sie hingehören, d.h. Müller gibts als "müller" und als "mueller" und das der Nutzer nicht weiß?
Bzw. wenn 2 oder 3 umlaute in einem Namen vorkommen?
(sind ja nicht nur Namen)
MatzeMuc86 ist offline  
Alt 20.10.2008, 09:21  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
wenn zum einen die Datenbank nicht konsequent umlaute hat, wo sie hingehören, d.h. Müller gibts als "müller" und als "mueller" und das der Nutzer nicht weiß?
Die Aussage verstehe ich nicht. Kannst Du das mal verständlich formulieren?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Umlaute und MySQL4.1 Datenbanken 2 15.11.2009 15:28
Umlaute und Ajax themonk JavaScript, Ajax und mehr 5 12.10.2008 18:30
Umlaute in Datenbank zerschossen. Wie reparieren? MatzeMuc86 Datenbanken 1 14.09.2008 17:48
Umlaute in Datenbank Eldra PHP Tipps 2008 3 14.05.2008 07:11
XML parsen und Umlaute betterknower PHP Tipps 2008 6 31.12.2007 18:35
UTF8 Dump erzeugt nach import in UTF8 kod DB falsche Umlaute Carino Datenbanken 18 07.05.2007 23:49
Umlaute bei Linux flual2000 PHP Tipps 2006 10 28.04.2006 13:12
Umlaute in Texte ersetzen! wiegia086 PHP Tipps 2006 2 20.04.2006 08:58
[Erledigt] Keine Umlaute beim MediaWiki im Internet Explorer PHP Tipps 2006 1 15.02.2006 18:50
[Erledigt] mit php umlaute un Textdatei schreiben (Apple Tiger PHP4) PHP Tipps 2007 7 29.12.2005 19:08
Umlaute... JK PHP-Fortgeschrittene 7 07.12.2005 20:55
[Erledigt] Mit preg_match auch Umlaute erlauben PHP Tipps 2005-2 4 08.08.2005 10:10
Umlaute in Dateien per CLI in HTML-Entities umwandeln PHP-Fortgeschrittene 5 19.07.2005 09:06
[Erledigt] Umlaute werden falsch maskiert PHP Tipps 2004-2 4 11.11.2004 13:19
umlaute ausschliessen Promaetheus PHP Tipps 2004 3 19.10.2004 22:24

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
str_replace umlaute, php str_replace umlaute, php replace umlaute, str_replace utf8, str_replace php umlaute, php str_replace utf8, str_replace sonderzeichen, str_replace umlaut, php str_replace sonderzeichen, php umlaute str_replace, php str replace umlaute, php replace umlaut, str replace umlaute, str_replace utf-8, php string replace umlaute, php replace umlauts, php str_replace umlaut, php str_replace utf-8, umlaute str_replace, str_replace ascii

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:09 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum