PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Textersetzung


MasterPeace
04.12.2006, 19:46:01
Ich versuche Umlaute wie Ö Ü Ä umzuwandeln...
Klingt ganz einfach
einfach htmlspecialchars($nachricht) oder htmlentities($nachricht)
aber es Funktioniert nicht!
Ich kann mit keinem einzigen Textersetzungsbefehl die Zeichen umwandeln.


$nachricht = $_POST['nachricht'];
$nachricht = str_replace("ü", "ae", $nachricht);
$nachricht=ereg_replace("ä", "ae", $nachricht);
$nachricht = nl2br($nachricht);


Aus Not hab ich versucht alles zusammen zu schmeißen und einfach Umlaute in normale Buchstaben umzuwandeln... Aber es geht nicht.
Ich weis nicht was ich Falsch mache.
Die Variable $_POST['nachricht'] wird auch weiter gesendet und die $nachricht wird in die Datenbank eingetragen. Alle anderen Zeichen und Buchstaben kann ich umwandeln. Aber die Umlaute gehen nicht.

Ich hoffe ihr könnt mir helfen. Weis einfach nicht mehr weiter...

Damir
04.12.2006, 20:21:03
Hi,

der Fehler muss woanders liegen....

Versuche mal folgendes:

<?PHP
$nachricht = "Ich habe überhaupt keine äpfel mehr.";
$nachricht = str_replace("ü", "ue", $nachricht);
$nachricht=ereg_replace("ä", "ae", $nachricht);
$nachricht = nl2br($nachricht);

echo $nachricht;
?>

Einfach in eine Datei und ausführen. Er sollte es ersetzen. Wenn er es ersetzt dann hast du irgendwo ein Fehler in deinem Code.

Damir

MasterPeace
04.12.2006, 20:39:16
Mein Text:

Ich finde Äpfel total cool. Überhaupt sind die ganz Günstig!

Die Ausgabe im Quelcode:


Ich finde Äpfel total cool. Überhaupt sind die ganz Günstig!


und der eintrag in der Datenbank

Ich finde Äpfel total cool. Überhaupt sind die ganz Günstig!

Also es wird umgeändert bevor es in die Datenbank kommt. Aber nach dem Umändern ist alles wie vorher...

deine Hilfe hat leider nichts gebracht.

MasterPeace
04.12.2006, 20:54:05
Ich hab vergessen zu Speichern sry!

Wenn ich die Variable direkt in das Dokument schreibe also so:

$nachricht = "Ich habe überhaupt keine günstigen Äpfel mehr!";
$nachricht = str_replace("ü", "ue", $nachricht);
$nachricht = ereg_replace("ä", "ae", $nachricht);
$nachricht = nl2br($nachricht);




Dann funktioniert es!

Aber warum geht es dann nicht über $_POST ?

Ich habe mein Dokument nochmal durchforstet.

Es kommt nur ein einziges mal vor dem Umwandeln im Dokument vor und dah nur zur überprüfung mit einem == .
Und die Variable wird direkt vom Formular ans Dokument gesendet.

also versteh ich nicht warum es nicht funktioniert!

Swoosh
04.12.2006, 21:01:00
warum machst du einmal str_replace und einmal ereg_replace?
also ich mach das auch immer aber ich verwende nur str_replace

<?
$text = $_POST['text'];

// Ü,ü ersetzen
$text = str_replace("Ü", "&Uuml;", $text);
$text = str_replace("ü", "&uuml;", $text);

// Ä,ä ersetzen
$text = str_replace("Ä", "&Auml;", $text);
$text = str_replace("ä", "&auml;", $text);

// Ö,ö ersetzen
$text = str_replace("Ö", "&Ouml;", $text);
$text = str_replace("ö", "&ouml;", $text);

// "\n" zu "<br />" umwandeln
$text = nl2br($text);

// Fertigen Text ausgeben!
echo $text;
?>

MasterPeace
04.12.2006, 21:04:28
Das habe ich nur deshalb gemacht, weil keines von beiden Funktioniert hat!
Und der Fehler scheint darin zu liegen das beim senden irgendwas an den Ü's und Ä's verändert wird, aber ich weis nicht was.
Und ich weis nicht warum!

Kann mir jemand helfen... wie auch immer! Ich nehme jeden Lösungsvorschlag dankend an und alle fragen die zur Lösung des Problems helfen könnten werden von mir best möglich beantwortet. Ich weis echt nicht mehr weiter!

Heinrich
04.12.2006, 23:05:35
Teste mal das:
$nachricht = "Äbääh ist Überübel und größer als Österreich";

echo $nachricht."<br>";

$array_1 = array('Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü', 'ß');
$array_2 = array('Ae', 'ae', 'Oe', 'oe', 'Ue', 'ue', 'ss');
for($x = 0; $x < 7; $x++){
$nachricht = str_replace($array_1[$x], $array_2[$x], $nachricht);
}

echo $nachricht;

meikel (†)
05.12.2006, 05:24:14
deine Hilfe hat leider nichts gebracht.
Das liegt daran, daß Du vergessen hast mitzuteilen, daß Deine Umlaute UTF8 kodiert aufschlagen.

chris17
05.12.2006, 08:41:23
Teste mal das:
$nachricht = "Äbääh ist Überübel und größer als Österreich";

echo $nachricht."<br>";

$array_1 = array('Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü', 'ß');
$array_2 = array('Ae', 'ae', 'Oe', 'oe', 'Ue', 'ue', 'ss');
for($x = 0; $x < 7; $x++){
$nachricht = str_replace($array_1[$x], $array_2[$x], $nachricht);
}

echo $nachricht;
Tipp, str_replace() kann mit Arrays umgehen:

<?php
$nachricht = "Äbääh ist Überübel und größer als Österreich";

echo $nachricht."<br>";

$array_1 = array('Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü', 'ß');
$array_2 = array('Ae', 'ae', 'Oe', 'oe', 'Ue', 'ue', 'ss');

$nachricht = str_replace($array_1, $array_2, $nachricht);

echo $nachricht;
?>

MasterPeace
05.12.2006, 22:31:45
Also Chris17 deine Idee funktioniert nicht ganz. Wenn ich meine Variable dort als normaler Text deklariere funktioniert es so wie immer, aber wenn ich sie über ein Formular sende dann funktioniert sie wieder nicht!



@meikel

Wie kann ich dann meinem Programm sagen das der Text mit UTF8 kodierung "aufschlagt"?
Kenn das noch nicht. Wär dankbar für eine Antwort.

meikel (†)
06.12.2006, 06:27:05
Wie kann ich dann meinem Programm sagen das der Text mit UTF8 kodierung "aufschlagt"?
Gegenfrage: Wo kommen die Texte denn her?

MasterPeace
06.12.2006, 09:40:29
Der Text wird in einem Formular auf einer anderen Seite geschrieben.
Das Textarea heist "nachrichten". Die Daten werden auf einer neuen Seite bearbeitet.
Der Text kommt auch auf der anderen Seite an und wird in die Datenbank geschrieben.
Aber die Umlaute werden nicht umgeändert. Und ich weis halt nicht warum... deshalb dieser Fread

meikel (†)
06.12.2006, 14:18:35
Der Text wird in einem Formular auf einer anderen Seite geschrieben.
Und wie sieht das genau aus? Hier interessiert der HEAD Bereich incl. DOCTYPE und das Formular.

MasterPeace
06.12.2006, 15:34:09
Tschuldigung... als ich den Beitrag geschrieben hatte, hatte ich keinen Zugang zu den Codes.
Also hier sind sie:

nachrichten.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

meikel (†)
06.12.2006, 16:34:28
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Alles klar?

MasterPeace
06.12.2006, 16:45:01
Vielen Dank an alle es funktioniert.

Diesen scheiß Header hat mir mein Editor automatisch reingemacht... dachte wär nicht so schlimm. Jetz hab ich es weggemacht und es funktioniert alles.

Vielen Dank für die Hilfe und die Gedult mit mir^^.

Socrates
06.12.2006, 22:06:34
Hi!
Warum ersetzt du ä's ö's und ü's nicht durch Latin Befehle?
Also so:
$title = $_POST["title"];
$title = stripslashes($title);
$title = strip_tags($title);
$title = nl2br($title);
$title = str_replace("\n","",$title);
$title = str_replace("\r","",$title);
$title = str_replace("\t","",$title);
$title = str_replace("\v","",$title);
$title = str_replace("\0","",$title);
$title = str_replace(" "," ",$title);
$title = ereg_replace("ä","&auml;",$title);
$title = ereg_replace("ü","&uuml;",$title);
$title = ereg_replace("ö","&ouml;",$title);
$title = ereg_replace("Ä","&Auml;",$title);
$title = ereg_replace("Ü","&Uuml;",$title);
$title = ereg_replace("Ö","&Ouml;",$title);
$title = ereg_replace("ß","&szlig;",$title);
so sähe das also für alles aus was amn so sinnvoller weise ersetzen sollte!
MfG, Andy

MasterPeace
07.12.2006, 20:45:05
So siehts jetz aus:


$nachricht = $_POST['nachricht'];
$nachricht = strip_tags($nachricht);
$nachricht = htmlentities($nachricht);
$nachricht = trim($nachricht);
$nachricht = nl2br($nachricht);
$nachricht = str_replace(" ", "&nbsp;", $nachricht);


Das andere war nur en Test weil es ja nicht funktioniert hat...

Aber jetz geht alles und ich bin überglücklich :-)