Siechfred: & (PHP) Feldwert: Resource id #2

Beitrag lesen

Tag Sven.

Versuche ich nun, 'http://www.example.org' zu speichern, enthält das Feld den Wert 'Resource id #2', ich möchte aber, dass wie in den anderen Feldern auch der URL im Klartext gespeichert wird.
Wie stellst du das fest? PhpMyAdmin?

Nein, mittels einer SQL-Abfrage und anschließender Ausgabe des Ergebnisses mit Hilfe von mysql_fetch_assoc().

if(!isUTF8($_POST['link'])) {
  $link = utf8_encode($_POST['link']);
}
else {
  $link = $_POST['link'];
}
Das sieht irgendwie schrill aus. Weißt du nicht, ob du UTF-8 kriegst, dann solltest du das lieber exakt definieren - in deinem Formular.

Das habe ich getan. Die erste Zeile im PHP-Script lautet [code lang=PHP]<?php header("Content-type: text/html; charset=utf-8"); ?>

  

> Alles andere ist ziemlich schwachsinnig. utf8\_encode wandelt von ISO-8859-1 nach UTF-8 - was natürlich nur richtig funktioniert, wenn du wirklich ISO-8859-1 erhälst, ansonsten zerstört es dir so oder so den Textinhalt.  
  
Hm, das Problem ist, wie ich den Zeichensatz herausbekomme. In <http://dev.mysql.com/tech-resources/articles/4.1/unicode.html> ist das nur für windows-1252 beschrieben, ich nahm fälschlicherweise an, dass utf8\_encode() die Umwandlung zu UTF-8 unabhängig vom Ausgangszeichensatz vornimmt.  
  

> > if(get\_magic\_quotes\_gpc()) {  
> >   $link = addslashes($link);  
> > }  
> Das ist nun mal komplett falsch. Wen magic\_quotes\_gpc gesetzt ist, willst du stripslashes() machen, um diesen Effekt wieder rückgängig zu machen. Und du willst das auch als allerallererstes machen, noch vor irgendeinem UTF-8-Gedöns.  
  
Okay, geändert.  
  

> > $query = "INSERT INTO news SET url=\_utf8'$link'";  
> Und hier fehlt noch mysql\_escape\_string() oder mysql\_real\_escape\_string(), welches auf $link angewendet wird. DAS IST DAS WICHTIGSTE!  
  
Alles klar, ebenfalls geändert.  
  
Aber du wirst es nicht glauben, ich habe es selber gefunden: ich habe einfach die Variable $link doppelt verwendet, einmal für den URL und einmal für mysql\_connect() - mannomann, wie blöd kann man eigentlich sein. Jedenfalls funktioniert es jetzt, wie es soll. Danke dir für deine kompetenten Hinweise.  
  
Siechfred  
  
PS: <flame>Mit Perl wäre das nicht passiert!</flame>

-- 
[Codeschnipsel gefällig?](http://sniplets.anaboe.net)