2009-06-30 12 views
3

Ich habe schon viele Funktionen ausprobiert, aber das kann ich einfach nicht herausfinden. Der richtige Weg sowieso.Konvertierung von Sonderzeichen in PHP

In einem Formular namens Beschreibung kann ich alle Arten von Zeichen erwarten. Diese müssen in HTML-Entitäten formatiert werden, bevor sie an die Datenbank gesendet werden.

Nun, mein Code:

$formdesc = htmlentities($_POST['formdesc'], ENT_QUOTES); 

Für eine MySQL-Abfrage, füge ich einfach eine "Safe" -Funktion der Schrägstrich 'aus der Zeichenfolge:

mysql_real_escape_string($formdesc); 

Dies ist jedoch manchmal doesn' t arbeiten. "é" zum Beispiel wird & Atilde; © anstelle von & eacute ;.

Es muss eine normale Funktion dafür sein. Weiß jemand was ich meine?

+1

Hätte dies nicht mit der Spracheinstellung für Ihre Datenbank zu tun? – peirix

+0

Ja, es scheint wie ein Unicode-Problem. Versuchen Sie im Allgemeinen, utf8 sowohl für Ihre Datenbank als auch für Ihr Frontend zu verwenden. –

+1

Ja, ich habe die utf-8-Kodierungseinstellung beim Kodieren meiner Zeichenfolge vergessen :) thx! –

Antwort

13

Sie benötigen die Codierung für den htmlentities function (hier UTF-8) zu spezifizieren:

$formdesc = htmlentities($_POST['formdesc'], ENT_QUOTES, 'UTF-8'); 

Andernfalls wird der Standardwert ISO-8859-1 verwendet wird und den Charakter é in Ihrem Beispiel in UTF-8 codiert als 0xC3A9 wäre interpretiert als zwei Zeichen (Ã und ©).

Aber warum verwenden Sie überhaupt htmlentities? Wenn Sie nur die HTML-Sonderzeichen wie &, <, >, " und 'htmlspecialchars entkommen wollen, werden ausreichen.

+0

es funktioniert !! Duh, so einfach ... aber thx! Warum> es schien so sicherer, liege ich falsch? –

+0

Sie müssen nur ein zusätzliches Zeichen durch Zeichenreferenzen ersetzen, wenn diese Zeichen nicht mit der von Ihnen verwendeten Codierung codiert werden können. Da Unicode jedoch ein beliebiges bekanntes Zeichen enthält und UTF-8 es codieren kann, müssen Sie keine anderen Zeichen als die Sonderzeichen von HTML ersetzen. – Gumbo

1

scheint, wie die üblichen PHP-Funktionen zu entkommen auf utf-8 Text nicht funktionieren. Vielleicht hilft dir Handling UTF-8 in JavaScript, PHP, and Non-UTF8 Databases. Eine andere Quelle über utf-8 und PHP ist die PHP UTF-8 cheatsheet.

+0

thx für Ihren Kommentar, aber ich habe es funktioniert jetzt. Ich vergaß die utf-8-Tag ja, thx! –

+0

Gern geschehen. Ich sehe Gumbo die Antwort war genau das Richtige, um das zu schaffen. –