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

En tråd i 'PHP, SQL og databaser' startet av Henningen, 9 Sep 2011.

  1. Henningen brukervennlig...

    Innlegg:
    28
    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
     
  2. Pong

    Pong Jeg selger sʇɥƃıluʍop :)

    Innlegg:
    3.454
    Når også tegnsettet i tabellen er satt til utf-8 høres det merkelig ut. Hvilken klient bruker du for å få lagret 'æøå' i et felt i en tabell i databasen?
     
  3. Henningen brukervennlig...

    Innlegg:
    28
    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.
     
  4. xdex

    xdex Medlem

    Innlegg:
    1.548
    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.
     
  5. Henningen brukervennlig...

    Innlegg:
    28
    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?
     
  6. tyr897

    tyr897 Medlem

    Innlegg:
    402
    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.
     
  7. xdex

    xdex Medlem

    Innlegg:
    1.548
    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.
     
  8. Pong

    Pong Jeg selger sʇɥƃıluʍop :)

    Innlegg:
    3.454
  9. Henningen brukervennlig...

    Innlegg:
    28
    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.
     
  10. Henningen brukervennlig...

    Innlegg:
    28
    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: æ ø å ' " \+
     
  11. adeneo

    adeneo Medlem

    Innlegg:
    1.611
    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.
     
  12. Henningen brukervennlig...

    Innlegg:
    28
    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));
     
  13. jagarock

    jagarock Information Research & Analytics

    Innlegg:
    301
    enkoding er vel noe av det kjipeste man går igjennom som programmerer tror jeg :D

    utf8_decode og encode er jo den klassiske men:

    det beste trikset er å detecte encoding først, og så eventuelt konvertere det til riktig enkoding så er du safe forever. mb_detect_encoding heter det vel i php
     
  14. Sono Juventino

    Sono Juventino Medlem

    Innlegg:
    15
    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_HOSTDB_USERDB_PASSWORDDB_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");
     
    Nutz liker dette.
  15. Nutz

    Nutz Med lem

    Innlegg:
    1.139
    Nydelig Sono! :)

    God og nyttig info blir aldr avleggs!
     

Del denne siden