Tekst opslaan in database
Probleem:
Tekst die ik uit een database haal en op mijn website weergeef, staat vaak vol met deze tekens: � (een zwarte ruit met een vraagteken erin).
Met name enkele en dubbele quotes zorgen voor problemen, maar ook eurotekens en ampersands.
Vraag:
Stel dat ik (bv. als admin) een artikel wil typen en in een database wil opslaan. Hoe kan ik dat dan het beste doen? Moeten bepaalde tekens voordat ze worden opgeslagen in de database eerst worden omgezet (htmlspecialchars)?
Ik zou wel graag de mogelijkheid willen hebben om zelf bepaalde tags toe te kunnen voegen (<h1>, <h2>, <p>, <b>, etc.) zodat ik de opmaak van de tekst kan beinvloeden.
En ook eens zoeken op utf-8.
Kijk eens naar dit voorbeeld welke functie jij graag zou willen gebruiken: http://phphulp.wouterj.nl/utf-8.php
En zorg ook dat je:
Als eerste element in de head hebt.
Dem Ian op 14/07/2012 13:48:31:
De tekst omhelzen door htmlspecialchars().
Maar niet als je het in de database zet.
Dan gebruik je mysql_real_escape_string().
Maar normaal gezien kan je ook de database een charset meegeven.
Tuurlijk moet je ook mysql_real_escape_string() erom geen zetten (SQL-Injection).
Maar je moet erg GEEN htmlspecialchars omheen zetten. Als je dat doet bij het ingaan van de Database zul je problemen krijgen als je het bericht weer eens aanpast, altijd de functie pas gebruiken wanneer je het ergens op je site echoëd.
Waarom bestaat die functie dan?
http://php.net/manual/en/function.htmlspecialchars.php
http://php.net/manual/en/function.htmlspecialchars-decode.php
Maar via de meta-tags, werkt het natuurlijk ook.
Dus die functie heeft best wel nut, alleen op de juiste plaats.
Gewijzigd op 14/07/2012 14:00:34 door Wouter J
Ik heb de tekst als volgt in de database staan:
<p> </p>
<p><b><u>1. Met wie sluit ik overeenkomsten?</u></b></p>
<p>Wanneer je aan de slag gaat met het opstellen algemene voorwaarden, zul je je allereerst moeten afvragen: “Met wie sluit ik overeenkomsten?”
En dat levert de volgende output op:
1. Met wie sluit ik overeenkomsten?
Wanneer je aan de slag gaat met het opstellen algemene voorwaarden, zul je je allereerst moeten afvragen: ?Met wie sluit ik overeenkomsten??
En met htmlspecialchars het volgende:
<p><b><u>1. Met wie sluit ik overeenkomsten?</u></b></p> <p>Wanneer je aan de slag gaat met het opstellen algemene voorwaarden, zul je je allereerst moeten afvragen: ?Met wie sluit ik overeenkomsten??
EDIT:
De database collatie is utf8-general-ci en in mijn header staat het volgende:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="charset" content="ISO-8859-1" />
Kan het te maken hebben met dat de tekst geknipt en geplakt is vanuit Word?
Gewijzigd op 14/07/2012 14:48:17 door The Ultimate
Tevens zijn de quotes die jij gebruikt niet de normale, je moet " gebruiken en niet “ en dat komt inderdaad door Word.
Ik heb de header aangepast. Klopt het overigens dat een euroteken als volgt in de database wordt opgeslagen: €