Irgendetwas konvertiert ISO automatisch zu UTF-8...
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
antwort
ausgeben
browser
code
datum
eingabe
formular
header
message
nachricht
nummer
problem
sonderzeichen
teddy
telefon
text
type
url
versand
zeichensatz
-
Hallo,
ich habe eine kleines script für den SMS- Versand aufgebaut. In dessen darf aber kein UTF-8 drin vorkommen. Allerdings egal was ich probiere, immer wenn es ein Umlaut "ä,ü,ö" gibt, wird mir als Zeichensatz UTF-8 angezeigt. Obwohl ich den header auf Iso-8859-1 gesetzt habe.. Verstehe das nicht so ganz :(
header('content-type text/html charset=iso-8859-1'); //ISO für sms versand
[...]
//Sollte ISO-8859-1 sein... setlocale(LC_ALL, 'de_DE'); echo mb_detect_encoding($text); echo $text;
Ganzer Code:
header('content-type text/html charset=iso-8859-1'); //ISO für sms versand include 'config.php'; //Nummer holen $telefon = $_GET['number']; //Nummer auf erlaubte Zeichen prüfen if (!preg_match("#^[0-9]{0,}[-/]{0,1}[+/]{0,1}[0-9]{0,}$#",$telefon)) { echo "Falsche Eingabe<br>"; exit; } //Nummer auf länge prüfen if(strlen($telefon) > 14){ echo 'Dein Nachrichten Text ist zu lang!'; exit; } //Null suchen und ersetzen $suchmuster[0] = "/^0+/"; $ersetzungen[0] = "+49"; $telefon = preg_replace($suchmuster, $ersetzungen, $telefon); echo $telefon; echo '<br>'; //Nachrichtentext auf Sonderzeichen prüfen und diese filtern wenn mq on ist if(get_magic_quotes_gpc() == 1){ $text = stripslashes($_GET['text']); } else { //Oder nur Nachrichtentext ausgeben $text = $_GET['text']; } //Nachrichtentext darf nur max. 160 Zeichen haben if(strlen($text) > 160){ echo 'Dein Nachrichten Text ist zu lang!'; exit; } //Sollte ISO-8859-1 sein... setlocale(LC_ALL, 'de_DE'); echo mb_detect_encoding($text); echo $text; $urlvar["to"] = $telefon; //Absender ist die geprüfte Nummer $urlvar["message"] = $text; //Nachricht ist die geprüfte Nachricht foreach($urlvar as $key=>$val) //Jede Variable als schlüssel durchlaufen und die url zusammensetzen inclusive das "&" für die Variablen- Trennung { $antwort.= $key."=".urlencode($val); $antwort.= "&"; } $antwort = @file($url."?".$antwort); //Antwort erhalten und erkennen $antwort_code = intval($antwort[0]); $antwort_code_arr[10] = "Empfängernummer nicht korrekt"; $antwort_code_arr[20] = "Absenderkennung nicht korrekt"; $antwort_code_arr[30] = "Nachrichtentext nicht korrekt"; $antwort_code_arr[31] = "Messagetyp nicht korrekt"; $antwort_code_arr[40] = "SMS Route nicht korrekt"; $antwort_code_arr[50] = "Identifikation fehlgeschlagen"; $antwort_code_arr[60] = "nicht genügend Guthaben"; $antwort_code_arr[70] = "Netz wird nicht abgedeckt"; $antwort_code_arr[71] = "Feature nicht möglich"; $antwort_code_arr[80] = "Übergabe an SMS-C fehlgeschlagen"; $antwort_code_arr[100] = "SMS wurde angenommen und versendet"; echo $antwort_code_arr[$antwort_code]; //Antwort ausgeben
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
kill-a-teddy schrieb:
Du hast hier einen Doppelpunkt und einen Strichpunkt vergessen... so sollte es aussehen:
header('content-type text/html charset=iso-8859-1'); //ISO für sms versand
header('content-type: text/html; charset=iso-8859-1'); //ISO für sms versand
Das sagt übrigens nur dem Browser, dass das dieser Zeichensatz sein soll. Wenn du jetzt aber UTF-8 ausgeben solltest werden Sonderzeichen als 2 komische Zeichen angezeigt... -
hackyourlife schrieb:
Du hast hier einen Doppelpunkt und einen Strichpunkt vergessen... so sollte es aussehen:header('content-type: text/html; charset=iso-8859-1'); //ISO für sms versand
Das sagt übrigens nur dem Browser, dass das dieser Zeichensatz sein soll. Wenn du jetzt aber UTF-8 ausgeben solltest werden Sonderzeichen als 2 komische Zeichen angezeigt...
Ja die Striche ok.. War nur leider nicht der Fehler..
Auch
gibt mir als Charset dann UTF-8 aus... :/mb_convert_encoding($text,'ISO-8859-1');
Beitrag zuletzt geändert: 4.9.2012 10:38:46 von kill-a-teddy -
kill-a-teddy schrieb:
Also bei einem Sonderzeichen wie äöü o.ä. jeweils 2 kryptische Zeichen?
Auch
gibt mir als Charset dann UTF-8 aus... :/mb_convert_encoding($text,'ISO-8859-1');
Was passiert, wenn du es so versuchst?echo(utf8_decode($text));
-
hackyourlife schrieb:
kill-a-teddy schrieb:
Also bei einem Sonderzeichen wie äöü o.ä. jeweils 2 kryptische Zeichen?
Auch
gibt mir als Charset dann UTF-8 aus... :/mb_convert_encoding($text,'ISO-8859-1');
Was passiert, wenn du es so versuchst?echo(utf8_decode($text));
Dann steht da noch immer UTF-8 und die Sonderzeichen / Umlaute werden nicht mehr angezeigt also Ä Ü Ö gibts net mehr :/ -
kill-a-teddy schrieb:
Was ist der aktuelle gesamte Code mit den Veränderungen?
hackyourlife schrieb:
Dann steht da noch immer UTF-8 und die Sonderzeichen / Umlaute werden nicht mehr angezeigt also Ä Ü Ö gibts net mehr :/
kill-a-teddy schrieb:
Was passiert, wenn du es so versuchst?
Auch
gibt mir als Charset dann UTF-8 aus... :/mb_convert_encoding($text,'ISO-8859-1');
echo(utf8_decode($text));
Woher kommen die Daten (Formular-Seite)?
Kann man das wo live bewundern? -
hackyourlife schrieb:
Was ist der aktuelle gesamte Code mit den Veränderungen?
Woher kommen die Daten (Formular-Seite)?
Kann man das wo live bewundern?
Ich habe lediglich deine Codezeile hinzugefügt...
Die Daten kommen von einer Formular- Seite... (Werde ich morgen früh mal als Archiv hochladen)
Derzeit nicht, ist alles localhost basiert. -
hast Du vielleicht im Code noch sowas drin ?
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
wenn ja, auch das noch ändern zu
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
und vielleicht hilft ja sowas:
<?php header('content-type: text/html; charset=iso-8859-1'); // ---- hier das Formular .... echo ' <form name="form1" method="GET" action=""> Bitte Text eingeben: <br> <textarea name="text" cols="40" rows="6" wrap="VIRTUAL"></textarea> <br> Absenden: <input type="submit" name="run" value="OK" /> </form> '; // ------- Text aus Formular-Eingabe ------ if (!empty($_GET['text'])) { $text = $_GET['text']; echo "<br />Vorher: <br />\n<pre>\n".$text."\n</pre>\n"; // ------ Wenn $text UFT-8 ist, dann: utf8_decode() anwenden ------ if (mb_detect_encoding($text, 'UTF-8', true) === TRUE) { $text = utf8_decode($text); } echo "<br />Nachher: <br />\n<pre>\n".$text."\n</pre>\n"; } ?>
-
Nicht elegant, dafür funktionierts:
$message = str_replace("ä", "ä", $message); $message = str_replace("ü", "ü", $message); $message = str_replace("Ä", "Ä", $message); $message = str_replace("ö", "ö", $message); $message = str_replace("Ö", "Ö", $message); $message = str_replace("ß", "ß", $message); $message = str_replace("Ãœ", "Ü", $message); $message = str_replace('\"', '"', $message);
$message durch $text ersetzen -
Wichtig ist:
1. Die Datei muss wirklich als UTF-8 gespeichert sein. Einfach mal mit nem Editor öffnen, die datei in UTF-8 umwandeln und wieder speichern.Ggf. alle dann "kaputten" Umlaute erneut eintippen.
2. Der Browser sollte mitbekommen, um welche Codierung es sich handelt, damit er auch den richtigen Zeichensatz verwenden kann. Das kann bzw. sollte man über verschiedene Möglichkeiten machen:
2.1 Über den HTTP-Header:
<?php header('content-type: text/html; charset=utf-8'); ?>
2.2 Über Metatag
Das hat aber den Nachteil, dass das Dokument schon geladen wurde, bevor es umgeandelt wird (bzw. wenns stimmt dann nicht). Dabei können Probleme entstehen. Der Vorteil ist, dass auch Eingaben von Benutzer dann bereits bei der Eingabe UTF-8 sind soweit ich weiß, sollte dann in dieser Hinsicht also keine Probleme mehr geben.
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
3. Die Datenbank bzw. andere Dateien bzw. dynamischer Content
Alle Daten, die dynamisch geladen werden, sollten auch in UTF-8 vorhanden sein. Es macht kein Sinn, eine ISO-8859-1 in eine UTF-atei zu includieren. Genauso bei Datenbank Aus- und Eingaben(!). Wenn man ISO eingibt, aber UTF-8 speichert oder Ausgibt kann es auch Probleme geben.
Wenn man sich daran hält, dürfte es keine Probleme geben. -
Ich weiß ja nicht welche Frage trueweb beantworten wollte (er hat ja gesagt, es muss in ISO sein, das wird schon seinen Grund haben), aber es könnte natürlich an deinem Editor liegen. Als letztes könnte ich mir noch vorstellen, dass du in der htaccess den Zeichensatz auf uft-8 gesetzt hast. Wenn du die Developer Tools von Chrome öffnest, was steht da in den headern drinnen?
MfG
Dominic -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage