POST Daten mit &#xxx; codiert

RedWraith

Mitglied
Hallo !

Ich skripte gerade an einer php Datei herum, die POST Daten von einem Computerprogramm beim Aufruf übergeben kriegt.

Ich kriege die POST Daten in meinem Script, dekodiere sie mit urldecode und danach mit html_entity_decode und verarbeite sie.

Das funktioniert auch soweit ganz gut, bis ich auf Umlaute treffe. Diese sind nämlich nicht mit ü ä und so weiter kodiert, sondern auf solche Art und Weise: ö ü ä.

Der Browser zeigt die richtigen Buchstaben an, also wird daran wohl nichts falsch sein, aber die Daten sollen in eine Datenbank eingefügt werden und da kann ich die Kodierung so garnicht gebrauchen.

Weiß jemand, wie man die wieder umgewandelt kriegt ?

html_entity_decode scheint nicht zu funktionieren.
 
Bei der Geschichte wirst du mit htmlentities denk ich mal nicht weit kommen, denn hier handelt es sich um Dezimalwerte eines ASCII-Zeichens, womit PHP meines Wissens nach nicht umgehen kann.
Da wird dir wohl "preg_replace" bzw. "str_replace" nicht erspart bleiben.

Wenn du dir daraus eine Funktion basteltst ist es wieder komfortabel ;).
Hier mal noch eine Tabelle der ASCII-Zeichen: ASCII.
 
Den Ursprungsstring kann man allerdings damit behandeln, so werden die Entitäten ü etc. gesetzt statt deren Dezimalentitäten. ;) Wenn man die Dezimalentitäten umwandeln will, kommt man um deine Methode natürlich nicht rum.
 
Hi !

Und danke für die Antworten.
Den Ursprungsstring mit htmlentities zu verschlüsseln ist an sich eine prima Idee, das Problem dabei ist nur, dass ich die Post Daten nicht von einem anderen php Skript übergeben kriege, sondern von einem Programm das ich nicht geschrieben habe.

Laut Dokumentation soll diese Postdaten zuerst url-dekodiert und danach die Entities aufgelöst werden. Nur leider haben die Daten keine html entities sondern den diese ANSI Kodierung.

Ich hab auch schon an str_replace gedacht, der Nachteil daran ist dass die Post Daten auch ein Freiform Textfeld enthalten. Wenn ich also str_replace nehme, dann müsste ich jede mögliche Variante berücksichtigen...

Aber es gibt bestimmt eine Art char(int) Funktion in php mit der man Zahlencodes in die entsprechenden Buchstaben umwandeln kann. Ich werd versuchen, den Text zu parsen, den Zahlencode auszulesen und dann entsprechend umzuwandeln.

Ich meld mich, wenn es geklappt hat.
 
Hi !

Das ist ganz einfach. Das System in das importiert werden soll ist ein Extranet für unsere Kunden. Die Daten, die importiert werden, sind Statistik und Lagerbestände und so ein Zeug.

Nun gibt es dort teilweise Stringverknüpfungen. Zum Beispiel wenn ein Kunde wissen will, was diese Woche alles in die "Müllergasse" geliefert wird. Und naja... "Müllergasse" != "Müllergasse"

Außerdem sollte eine html Kodierung IMHO erst dann geschehen, wenn notwendig.

Ich hab jetzt folgende Lösung:
PHP:
 <?php
 
	$zeichenkette = "Das ist die Beschriftung eines Überschallflugzeugs.";
	$suchmuster = '/&#(\d{1,3});/';
	$ersetzung = "$1";
	
	function callback($treffer)
	{
		return chr($treffer[1]);
	}
	
	// Ausgabe: Das ist die Beschriftung eines Überschallflugzeuges
	echo preg_replace_callback($suchmuster, callback, $zeichenkette);
 ?>

EDIT: Verdammt ! Toll, man sieht jetzt im Beispielstring $zeichenkette nicht, dass da die kodieren ANSI Zeichen drin sind, weil der Browser die direkt umsetzt. -.-
 
Zuletzt bearbeitet:
Grüße,

also ich hab mir da mal inzwischen ne kleine Funktion gebastelt:

PHP:
<?php
function Zeichenersetzung ($Zeichenkette) {
	$Suchen = array("/Ä/", "/Ö/", "/Ü/", "/ä/", "/ö/", "/ü/");
	$Ersetzen = array("Ä", "Ö", "Ü", "ä", "ö", "ü");
	
	$Ausgabe_Zeichenkette = str_replace($Suchen, $Ersetzen, $Zeichenkette);
	return $Ausgabe_Zeichenkette;
}
?>

:eek: So wie das jetzt da oben steht ist das natürlich Quatsch, denn de gute Technik wandelt meinen Code-Post hier schon so um , wie du das auch machen willst :D.

Also im Array Suchen kommen die Dez-Werte rein, die die vom Programm übergebene Zeichenkette in sich tragen kann:
Ä --> Ä,
Ö --> Ö,
Ü --> Ü,
ä --> ä,
ö --> ö,
ü --> ü

Dann rufst du die Funktion einfach auf der Zuweisungsseite einer Variablen auf und kannst dann mit dieser Variablen weiterarbeiten (Bsp. als String benutzen, der in die DB soll):

PHP:
<?php
$test = Zeichenersetzung($Zeichenkette_an_Funktion);
?>

Ich hab das ganze auch mit der "Müllerstraße" ausprobiert :p.
 
Moin,

das ist eigentlich merkwürdig, html_entity_decode() sollte auch mit Notationen wie ü umgehen können. Mit welchen Zeichensätzen arbeitest du da?
 
Nun gibt es dort teilweise Stringverknüpfungen. Zum Beispiel wenn ein Kunde wissen will, was diese Woche alles in die "Müllergasse" geliefert wird. Und naja... "Müllergasse" != "Müllergasse"

Das ist wieder das typische Problem, dass bei denen einer die Regeln von relationalen Datenbanken missachtet hat :-P
Ich würde die Sache so angehen, dass ich versuchen würde, alles in UTF-8 umzustellen. Wenn du allerdings keine Möglichkeit hast, an der Datenbank was zu ändern, dann wirst du um die unschönen Basteleien nicht rumkommen...

Wie Sven Mintel schon gemeint hat, müsste das aber mit html_entity_decode() klappen. Und falls nicht, ist im 1. Beispiel eine Workaround beschrieben.

Grüße,
Frezl
 
Zurück