Avatar billede 4v3nger Nybegynder
30. juni 2009 - 14:10 Der er 29 kommentarer

Problemer med æøå...

Vi har en side hvor folk indtaster et par ord der gemmes i databasen, alt er sat til utf8. databasen er utf8, filerne er gemt i utf8, header har utf8, forbindelsen til mysql serveren er i php sat til utf8.

Alligevel har et par stykker stadig det problem at æø eller å gemmes i databasen som '?'.

brugerne køre xp og vista, ie8.

det samme gør jeg, men jeg har ikke selv problemet.

jeg er lost, alle forslag er velkomne.
Avatar billede 4v3nger Nybegynder
30. juni 2009 - 14:12 #1
(du skriver dine ord på én php side, der kalder et javascript, hvis formål er at gemme ordene via et andet php script. ajax. javascript filen er også gemt i utf8)
Avatar billede Allankc Nybegynder
30. juni 2009 - 14:32 #2
php str replace - æ ø å - med å ø &aerlig; og hva fanden de nu hedder - UTF slår jo æ ø å ihjel så du er nødt til at gøre noget som det.
Avatar billede majbom Novice
30. juni 2009 - 14:51 #3
-> #2 - hvis der bruges UTF8 alle steder burde æøå virke fint nok!

-> #0 - kan du ikke tjekke om dem der har problemer ikke har fået indstillet deres browser til at bruge et bestemt tegnsæt, selvom jeg ville mene at det siden oplyser burde ovberskrive browserens indstilling.
Avatar billede Allankc Nybegynder
30. juni 2009 - 15:08 #4
jeg har lige arbejdet med en hjemmeside for nogen tid siden som havde charset og filer i UTF-8 - der døde alle æ ø å  ved afsendelse fra fromler osv.. så jeg tror den nemmeste måde at komme det til livs på er en str replace til html koden for tegnet.

php snakker iso-8859-1 fra standard pånær andet er defineret - så at de sender æ ø å afsted burde den godt kunne nå at fange og omskrive dem. for hvis de lander i en UTF defineret mysql database blir det slået ihjel - samme gør udtrækket af et æ ø å til et UTF-8 dokument. det var i hvert fald hva jeg gjorde på den side som jeg hjalp til med dengang. og det virkede. der var også UTF-8 sql db, utf-8 dokumenter og charset.
Avatar billede Allankc Nybegynder
30. juni 2009 - 15:11 #5
alternativt - hvis du benytter et header dokument og har muligheden så ændre til iso-8859-1 ville være den bedste løsning for et dansk website. gem da dokumenter i ansi -iso
Avatar billede 4v3nger Nybegynder
30. juni 2009 - 15:12 #6
mange tak for begge svar...

#2 - bruger utf8 alle steder... mange kan godt komme igennem med æøå... og jeg bruger php mb_ (multibyte) funktioner hvor jeg kan.

#3 - Jeg fik det svar at vista installationen er helt ny... vedkommende vidste ikke hvordan man ændrede det... Det var ellers også mit første gæt... Så vidt jeg ved er automatisk karakter sæt standard i en ny installation.
Avatar billede repox Seniormester
30. juni 2009 - 15:27 #7
link til test?
Avatar billede 4v3nger Nybegynder
30. juni 2009 - 16:19 #8
http://seotimeline.dk , det er en keyword tracker.

Du skal oprette dig først.
tilføje et hvilket som helst domæne og keyword.

klikke på knappen seotimeline til højre.
klikke på knappen redigér indstillinger->tilføj/fjern keywords.

når du så indtaster et keyword med æøå kommer problemet...
(nogle gange)
Avatar billede majbom Novice
30. juni 2009 - 16:28 #9
jeg får fejlen i IE8

har oplevet samme problem, med et site jeg lavede før jeg var klar over at ISO-8859-1 og AJAX ikke passede særlig godt sammen, der brugte jeg utf8_decode() på de strenge der kom fra et ajax-kald og skulle i db
Avatar billede erikjacobsen Ekspert
30. juni 2009 - 20:50 #10
Bruger du POST til dit AJAX-kald? Og sætter du tegnsættet på dit "XMLHttpRequest"-object?
Avatar billede 4v3nger Nybegynder
01. juli 2009 - 09:24 #11
Jeg har lige prøvet at bruge post og sætte charset i xmlhttp, men samme resultat.

xmlobject.open("POST",url,true);
xmlobject.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");

så vidt jeg kan se skulle det være som ovenstående?

(jeg har løst det ved at tjekke for utf-8 i php-filen der modtager fra javascriptet, og så konvertere hvis det er nødvendigt, men jeg ser hellere at der bliver brugt utf-8 hver gang.)
Avatar billede erikjacobsen Ekspert
01. juli 2009 - 09:28 #12
Og din data bliver ikke sendt i URL-en ?
Avatar billede repox Seniormester
01. juli 2009 - 09:34 #13
Responsen fra din server, ser for mig således ud:

Date: Wed, 01 Jul 2009 07:29:20 GMT
Server: Apache/2.2.3 (Linux/SUSE)
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4800
Keep-Alive: timeout=2, max=10000
Connection: Keep-Alive
Content-Type: text/html

200 OK

Din Content-Type header BØR definere hvilket tegnsæt der skal bruges.

Content-Type headeren skulle så se sådan ud:
Content-Type: text/html; charset=UTF-8

Det samme bør den fil du modtager dit AJAX kald til keywords på gøre.
Jeg tror det vil løse problemet.
Avatar billede majbom Novice
01. juli 2009 - 09:59 #14
-> repox - hvordan får du den info ud? det er jo rimelig brugbart :)
Avatar billede repox Seniormester
01. juli 2009 - 10:03 #15
@splazz:
Jeg benytter mig af Web Developer toolbar'en til Firefox. :)
Super smart stykke værktøj som kan hjælpe med at bugfixe rigtig mange ting på klientsiden. :)

Du kan finde den her:
https://addons.mozilla.org/en-US/firefox/addon/60
Avatar billede majbom Novice
01. juli 2009 - 10:29 #16
nu er jeg jo ie lover (ja, det er sq nok vanens magt :S), men kunne da være at man skulle overveje at skifte...
Avatar billede repox Seniormester
01. juli 2009 - 10:38 #17
Altså, for og imod diverse browsere er en endeløs debat man aldrig kan blive enige om. :)

Firefox har for mig været den eneste rigtige browser i udviklingsøjemed. Men uanset, så har jeg altid en vifte af browsere jeg kontrollerer mit output op imod (IE, Safari, Opera og Firefox. Google Chrome gider jeg ikke bruge tid på - endnu).
Avatar billede 4v3nger Nybegynder
01. juli 2009 - 12:11 #18
Jeg er rigtig glad for at i gider at bruge så meget tid på det her.

#12 - data kommer frem, via post, defineret i variablen url, men stadig som iso når der bruges ie.

#13 - jeg har nu tilføjet:

header('Content-Type: text/html; charset=utf-8');

og det afspejles i response header. men det var desværre ikke nok.
(burde jeg gøre det i alle filer? for god orden. jeg har indtil videre bare skrevet det i meta tags)
Avatar billede repox Seniormester
01. juli 2009 - 12:31 #19
Prøv lige i dit <form> element at tilføje accept-charset.
Altså:
<form action="/addsite.php" method="post" id="siteform">
rettes til
<form action="/addsite.php" method="post" id="siteform" accept-charset="UTF-8">
Avatar billede repox Seniormester
01. juli 2009 - 12:43 #20
Altså, jeg kan stadig ikke se at serveren responderer med Content-Type: text/html; charset=UTF-8

Er du sikker på du gør det rigtigt? Men ja, gør det på alle sider hvor du har text/html output.
Avatar billede majbom Novice
01. juli 2009 - 12:50 #21
-> repox - nu fik jeg installeret ff og den udvidelse dér, og jeg har en side med et ajax-script hvor charset også er sat, men det kan jeg ikke se i respond-tingen...
Avatar billede repox Seniormester
01. juli 2009 - 12:59 #22
@splazz:

Hvis du nu tager og besøger siden her:
http://err0r.dk/utf8.php

Så vælger du Information -> Vis response headers i din Web Developer toolbar.

Så skulle du gerne få åbnet en fane hvor responsen fra serveren står skrevet.

Du kan så hurtigt se at min utf8.php fil responderer med
Content-Type: text/html; charset=UTF-8 i modsætning til OP's sider.
Det kan have stor betydning for problemet.

Hvis du nu tilgår den pågældende AJAX modtagende side, med et almindeligt http kald, så kan du også se om siden responderer som forventet. Et AJAX kald er jo egentlig bare et HTTP kald fra din egen browser.
Avatar billede 4v3nger Nybegynder
01. juli 2009 - 13:23 #23
repox - jeg tror du er på en anden side, lige nu ændrer jeg kun tilføj/fjern keywords. (/editsite.php)

(men jeg har stadig check og konvertering via. php så når man tester vil det jo virke, men fjerner jeg konvertering i php, virker det stadig ikke)
Avatar billede repox Seniormester
01. juli 2009 - 13:27 #24
Det er i princippet ligegyldigt hvilken side jeg er på.
Hvis min browser ikke ved hvad den skal sende til dig, så får det som den som standard vil sende (IE vil gerne sende Windows-1252).

Du skal sørge for at alle de sider du har text/html output på smider det rigtige charset ud til browseren.
Avatar billede 4v3nger Nybegynder
01. juli 2009 - 13:34 #25
ja, selvfølgelig... jeg har bare kun tilføjet header charset utf-8 med php i editkeyword.php og editsite.php :)

alle andre filer har stadig kun sat charset via meta tag...
Avatar billede erikjacobsen Ekspert
01. juli 2009 - 13:38 #26
"data kommer frem, via post, defineret i variablen url, " - data skal frem i body på http-requesten. Det er body man sætter tegnsæt for.

Jeg tror faktisk ham her skriver hvad man skal: http://www.delarte.nl/index.php?option=com_content&view=article&id=63:ajax-and-your-character-set&catid=34:algemeen&Itemid=55
Avatar billede repox Seniormester
01. juli 2009 - 13:47 #27
Udover at du laver noget gris ved at hente et helt HTML dokument ind i et eksisterende HTML dokument (altså, både med doctype, html, head body og sådan noget) med editkeywords, så tror jeg problemet ligger i din addKeyword() funktion.

Prøv at udkommentere:
xmlHttpKeywordadd.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");

og så fjern udkommenteren af den oprindelige og ret den til
xmlHttpKeywordadd.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
Avatar billede ohhelpme Nybegynder
01. juli 2009 - 14:41 #28
-
Avatar billede 4v3nger Nybegynder
02. juli 2009 - 20:40 #29
Hej igen og tak for alle jeres svar.
Det lykkedes mig faktisk at finde fejlen...
jeg brugte ikke encodeURI... så simpelt var det.

jeg har ladet mig fortælle at det meste simple er det mest oversete... :D

men ikke desto mindre har jeg taget alle de andre råd til mig, jeg syntes der er stor forskel på, hvad der virker og hvordan det burde gøres.

i skal have tak for denne gang, og i er selvfølgelig velkomne til at komme forbi og bruge siden, jeg skal sørge for at i får det lidt mere gratis end de andre...

( giver i nogle svar, giver jeg nogle point... :D )
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester