Multidesk.be » Forums » PHP » tekst opslaan in database

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door Simon op zondag 28 september 2008 om 21:28:21.
Simon's avatar
Multiviteit: 3742
Ik heb enkele vragen omtrent het invoeren van tekst in de database. Met tekst bedoel ik bijvoorbeeld berichten, reacties van gebruikers, ... waarin dus alle tekens kunnen voorkomen.

Momenteel pas ik voor het invoegen in de database addslashes(), strip_tags() en htmlentities() toe op de tekst.
Bij het eruithalen (om het dan weer te geven) nl2br().

Nu heb ik echter gemerkt dat er daarbij enkele problemen voorkomen. Een é wordt al na eerste invoering omgezet naar é en dan zo weergegeven op het scherm, ook in de database staat é en niet é. Bij het bewerken van die reactie worden telkens opnieuw dezelfde functies toegepast en wordt het telkens erger en erger met die speciale tekens. Na enkele keren is de é al Ã��Ã�©.

Wat moet ik dus doen om tekst in een database op te slaan? Welke functie moet ik erop toepassen?
En wat moet er gebeuren als ik het eruit haal?
Hoe kan ik ervoor zorgen dat een tekst die bewerkt wordt goed omgezet wordt? Daar kunnen namelijk nieuwe tekens in voorkomen (die wel omgezet moeten worden) en oude tekens (die niet omgezet moeten worden).
^ Reactie #1 geschreven door thekid op zondag 28 september 2008 om 23:02:44.
thekid's avatar
Multiviteit: 5273
Moderator
utf8 database gebruiken :)
dan kan je wel speciale tekens gebruiken

gebruik je lokaal mysql db? ipv van dus latin1 charset gebruiken, kiezen voor utf8 charset
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #2 geschreven door Martijn op maandag 29 september 2008 om 07:21:29.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Ik zou in eerste instantie al je tekst als "normaal" in je database invoeren, dus zonder die strip_tags en htmlentities(). Als je dit doet om performantiewinst te boeken bij het uitlezen, is caching een veel betere oplossing daar.

Daarnaast gaat het probleem volgens mij, zoals thekid al aangaf, bij de encoding liggen. Kijk eens na welke karakterset je gebruikt in je pagina's en kijk vervolgens eens welke je gebruikt in je database.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #3 geschreven door Simon op maandag 29 september 2008 om 20:14:34.
Simon's avatar
Multiviteit: 3742
In die encoding ben ik niet echt thuis :).

Op mijn pagina's gebruik ik utf-8. In de database staan de velden als latin1_swedish_ci. Dus als ik alles wijzig naar utf-8 zou het moeten werken? Welke utf-8 moet ik dan nemen. De lijst bevat utf8_bin, utf8_een_taal_ci en utf8_unicode_ci.

De htmlentities() en strip_tags() heb ik verwijderd. Ik pas nu alleen addslashes toe. Wanneer moet ik htmlentities() en strip_tags() dan toepasen? Bij het weergeven van de gegevens, nadat ze uit de database gehaald zijn?

^ Reactie #4 geschreven door thekid op dinsdag 30 september 2008 om 01:41:30.
thekid's avatar
Multiviteit: 5273
Moderator
utf8_bin is goed wi :)

wat introductie over charsets in MySQL
http://mysql.he.net/doc/refman/5.0/en/charset.html

nen blog over hoe alles in utf8 te zetten
http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #5 geschreven door Martijn op dinsdag 30 september 2008 om 06:48:38.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder

Dixit

Dixit Simon op 29/09/2008 20:14:34:De htmlentities() en strip_tags() heb ik verwijderd. Ik pas nu alleen addslashes toe. Wanneer moet ik htmlentities() en strip_tags() dan toepasen? Bij het weergeven van de gegevens, nadat ze uit de database gehaald zijn?


Inderdaad; cru gezegd: wanneer je je echo doet van de data, zet je er htmlspecialchars() rond :).
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #6 geschreven door Simon op woensdag 1 oktober 2008 om 19:43:27.
Simon's avatar
Multiviteit: 3742
Ik heb nu alle tabellen in utf-8 gezet. Op de pagina's krijg ik nu geen rare tekens meer, tenzij die al in de database stonden.
Als ik nieuwe waarden invoer, staan ze goed op de pagina, maar in de database nog altijd vreemd. Astérix wordt bijvoorbeeld Astérix.

Op de link naar die blog die thekid gaf, stond ook dit:

Dixit

httpd.conf:
AddCharset UTF-8 .utf8
AddDefaultCharset UTF-8

php.ini
default_charset = "utf-8"

my.cnf
character-set-server=utf8
default-collation=utf8_unicode_ci


Kan het kwaad als ik dat ook in de configuratiefiles plaats?

Dixit

Dixit Martijn op 30/09/2008 06:48:38:

Inderdaad; cru gezegd: wanneer je je echo doet van de data, zet je er htmlspecialchars() rond :).

Is er een niet cru manier dan :)?
^ Reactie #7 geschreven door thekid op woensdag 1 oktober 2008 om 21:02:05.
thekid's avatar
Multiviteit: 5273
Moderator
Vanuit welke client kijk je naar je database? Die moet utf8 weergave ondersteunen ook, hé (en dus als default charset utf8 gebruiken, zie my.cnf ;))

ik gaf eigenlijk die bloglink omdat ik weet dat je met php werkt, en dat die kerel daar blijkbaar nog een paar intressante tips voor gaf :)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #8 geschreven door Simon op woensdag 1 oktober 2008 om 21:36:08.
Simon's avatar
Multiviteit: 3742
Ik begrijp eigenlijk niet wat je met client bedoelt? (Waarschijnlijk denk ik weer te ver :)).
Misschien kan je iets zien op het hoofdscherm van phpmyadmin?

Bijlage: 4849e4c9f4a495dc17e1250711f41ec5.jpg

Zou het kunnen dat ik geen my.cnf bestand staan heb? Hier is gewoon xampp geïnstalleerd en als ik zoek in die map vind ik niets terug.
^ Reactie #9 geschreven door thekid op donderdag 2 oktober 2008 om 14:39:06.
thekid's avatar
Multiviteit: 5273
Moderator
Mja, normaal gebruik ik de MySqlAdmin en de MySqlQueryBrowser voor mijn database toegang, ik had het op die clients.

Zo te zien staat alles bij u goed ingevuld, en op uw php werkt het wel, dus, "when it isn't broken, don't fix it" past hier wel :)

Xampp is een totaalproduct natuurlijk, misschien langzamerhand eens durven een apache met een mysql op te zetten via bvb een linux. Met VirtualBox heb ik thuis ook zoiets opgezet, een aparte webserver/databaseserver in een Virtualbox, die ik enkel opstart wanneer ik daadwerkelijk zoiets moet programmeren, werkt een beetje trager (maar is een compacte linuxserver xubuntu), maar zo kan je alles in 1x "online" testen

Ge moet dan wel de LAN instellingen wat wijzigen waardoor de Virtualbox als een deel van je netwerk gaat fungeren, dus 't is wel iets van werk aan, maar vanaf dan zit je met een "echte virtuele" webserver :)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen