Nok et æ ø å spørsmål, konkret sådan

Henningen

brukervennlig...
Hei

Har satt ALT til utf-8.
meta, header, filtype, database.

Når man lagrer for eksempel æ ø å i basen så vises tegnene i basen som helt andre tegn.

Er det "normalt"? Hvis det påvirker sorteringen ved spørringer så blir det jo bare tull...

Alt vises ok i nettleseren.

Takker
 

Henningen

brukervennlig...
Jeg bruker firefox nettleser.
PHP-fil, jQuery ajax -> php

php filen som inserter starter slik:
<?
header('Content-Type: text/html; charset=utf-8');


Jeg tok en tur innom PHPadmin etter gammelt og ser at der går inserts osv. fint, og PHPadmin er jo "webbasert" så da er vel mysql riktig satt opp???

Har en mistanke om at det må være mellom ajax/php og mysql problemet ligger.
 

xdex

Medlem
Prøvd med utf8_encode etc? dersom ting blir lagt inn i databasen fra ajax calls etc skjer dette ofte, bare å slenge på en encode, se om det fungerer.

Dersom dette ikke fungerer, må vi se hva du har gjort, dersom alt er satt til UTF8 som du sier, skal ikke dette skje.
 

Henningen

brukervennlig...
ok, har nå analysert, dette er et ajax "problem".
Kjører jeg insert php filen rett fra nettleser blir det lagt inn riktig i basen.

Jeg ønsker ikke å bruke encoding/decoding osv. må jeg det?
 

tyr897

Medlem
Bruk alltid UTF-8 på alt, så slipper du problemer. UTF-8 i databasen, UTF-8 som filformat, UTF-8 som charset i HTTP spørringer. Å gjøre dette enhetlig fra starten sparer deg mye bry i etterkant.

Dersom det er problemer med ajax-spørringer, sørg for å sette charset også her.
 

xdex

Medlem
Du MÅ ikke bruke encoding, men dersom man ønsker callback med ÆØÅ eller andre "spesielle tegn" må man ha encoding av en eller annen slag, ellers vil javasscript stoppe opp.

Dette gjelder spesielt ved bruk av json objekter i javascript. Det er ingen skam å måtte bruke encode, enkelt er det også. Wrap alle tingene inn i en array, og bruk encode på hele array elementet.
 

Henningen

brukervennlig...
For å presisere litt: Du bruker character-encoding uansett - Character encoding - Wikipedia, the free encyclopedia
Men du ønsker ikke bruke encode-funksjoner i php (som heter escape() i javascript).
Sant?
Hehe, for å være helt ærlig vet jeg ikke hva jeg vil bruke og ikke bruke.
Jeg ønsker å få det til å fungere med æ ø å uten en mye fuss.
Mener jeg brukte encode/escape osv. for noen år siden og mener å huske at jeg fikk problemer med tegn som ' " % osv.

Mulig jeg er på blåbærtur.

Hvis noen kan lede meg i riktig retning så er jeg takknemlig for det.
 

Henningen

brukervennlig...
Resultat etter kveldens test:

if(k1kategoritekst){
$.ajax({
type: "POST",
url: "Sys_LagreKategori.php",
data: "k1kategoritekst="+k1kategoritekst,
success: function(resp){
$('#kategorier').prepend(resp);
},
error: function(e){
alert('Error: ' + e);
}
});
}

k1kategoritekst:

var k1kategoritekst = escape(k1kategoritekst);
input: 1. æ ø å ' " \+
base: 1. æ ø å ' " \
resp: 1. � � � \' \" \\
php/html: 1. � � � ' "

var k1kategoritekst = encodeURI(k1kategoritekst);
input: 2. æ ø å ' " \+
base: 2. æ ø å ' " \
resp: 2. æ ø å \' \" \\
php/html: 2. æ ø å ' "

Hva må til for å få dette resultatet:
input: æ ø å ' " \+
base: æ ø å ' " \+
resp: æ ø å ' " \+
php/html: æ ø å ' " \+
 

adeneo

Medlem
Jeg kommer på to enkle måter å ordne dette på.

Enten skriver du ting som htmlentities, altså "å" skrives "&aring;" osv. Det er mulig å bruke php's htmlentities() til å konvertere slikt, men helt hvordan man setter opp noe slikt til fungere med Ajax vet ikke jeg, hvis det i det hele tatt er mulig?
Dersom man legger til seg vanen å skrive htmlentities så vil det fungere uansett hva annet du roter til.

Den andre løsningen er å lagre alle filene og sette alt til ISO-8859-1.

Jeg testet litt raskt et par ting her, og forsøkte å sette contentType i Ajax, prøvde noen filtere, og diverse javascript escape(), encodeURIComponent() osv. uten at det hjalp noe ettersom æøå oppfattes av UTF8 som æøå.

Javascripts replace() og en regex for å bytte ut for eksempel "æ" med "æ" fungerer, men dette er en lite optimal løsning ettersom all data må gåes igjennom osv.

Jeg hadde nok enten skrevet om alt til htmlentities eller lagret som ISO-8859, selv om det siste har enkelte bakdeler det også.
Det eneste nyttige jeg fant på G var en side som viser deg hvordan ting blir seende ut med diverse konverteringer, artig men egentlig ikke så veldig nyttig.
 

Henningen

brukervennlig...
Hei
Takk for alle tips.

Løsningen lå i phpscriptet ved bruk av utf8_encode/decode som ble nevt tidligere i tråden.

Inn:
$k1kategoritekst = utf8_decode($_POST['k1kategoritekst']);

do stuff

Tilbake:
$k1kategoritekst = utf8_encode(stripslashes($k1kategoritekst));
 
Beklager å bumpe et litt gammelt emne. Dette er uansett et så vanlig problem at flere sikkert har godt av å høre det:

Av en eller annen grunn må man tidvis bruke funksjonen mysqli_set_charset() etter at man kobler til databasen. Dette fjerner behovet for kode som uft8_encode.

PHP:
$connect = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
mysqli_set_charset($connect, "utf8");

Sammen med korrekt tegnsett ved lagring av filer, er problemene løst. Sleit mye med denne nøtten selv. Samme funksjon benyttes i objekt-orientering.

$connect->set_charset("utf8");
 
Topp