Gå til innhold

Problemer med norske tegn


Anbefalte innlegg

Hei!

 

Skal lage et veldi enkelt script som skal kunne skrive til en MySQL database fra mobilen. Men det ble ikke så enkelt som jeg tenkte. Jeg skal altså ha webside som skal kunne vises på mobilen og ha et tekstfelt og en send knapp. Jeg har prøvd med både et form i ren html, og med wml, men på begge forsøkene så ble æøå endret til noen rare tegn i php variabelen som det blir lagret i. Hva kan dette kome av og hvordan løser jeg det?

 

Her er mitt forsøk med ren html:

 

<form method="POST" name="post.php">

<p align="center"><b>Tekst:</b></p>

<p align="center"><input type="text" name="tekst" size="20"></p>

<p align="center"><input type="submit" value="Lagre"></p>

</form>

 

Og her er forsøket med WML:

 

<input name="tekst"/><br/>

<anchor>Lagre!<go href="sign.php?tekst=$(tekst)"/></anchor><br/><br/>

 

Håper noen har noen gode tips.

 

Glemte å nevne at mobilen jeg prøver med er en SE W810i.

Endret av rolvs
Lenke til kommentar
Videoannonse
Annonse

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fin Tittel</title>
</head>
<body>


</body>
</html>

 

Slik kjører jeg hovedmalen for ethvert html side jeg har. Legg merke til charset meta taggen. Dette har funket best for meg egentlig.

 

Du kan ta med xml deklarasjonen <?xml version="1.0" encoding="UTF-8"?> ... men dette liker ikke ie ... eller var det opera ... husker ikke. Er en grunn til at jeg droppa den, men den skal EGENTLIG være med om siden skulle vært xml standard.

 

Du kan også pøse på en header() i php skriptet som styrer charsettet. Slik sett så får du bedre kontroll over hva browseren kjører, og hva du kan forvente i retur.

 

Vet ikke om dette vil hjelpe, men jeg tipper det sånn uti blå luften.

 

PS: Jeg har utf-8 her, men husk at php ikke har støtte for dette i grunn. iso-8859 er vel det som er standard mener jeg.

Lenke til kommentar

Takk for tips!

 

Det fungerte sånn delvis å legge inn:

 

<?xml version="1.0" encoding="UTF-8"?>

 

Det blir riktig med æøå når jeg printer ut variabelen på php siden jeg poster til, men når det blir lagt inn i MySQL databasen blir det bare:

 

Dette er en test på æøå!

 

Hvorfor?

Lenke til kommentar
Gjør du noe med variabelen mellom at du printer den og legger den i databasen? Er databasen i UTF-8?

7930957[/snapback]

 

Nei, ikke annet enn å printe den ut med echo. Her er php koden jeg bruker:

 

<?php

if ($_GET[tekst] != "") {

echo "$_GET[tekst]";

$dato=date("d/m/Y k\lokk\a G:i");

$db = mysql_connect("localhost", "brukernavn", "passord");

mysql_select_db("database",$db);

$sql = mysql_query("INSERT INTO `innlegg` (`id`, `tid`, `tekst`) VALUES ('', '$dato', '$_GET[tekst]')");

}

?>

 

Hvordan sjekker jeg, og eventuelt endrer hvilket tegnsett databasen er? Ser ikke noe sånn i phpMyAdmin som jeg bruker.

 

Oppdatering:

 

Jeg satte inn linjen $dill=`echo $_GET[tekst] >> /testing`; og så i /testing så kom det akkuratt samme, bare med rare tegn i steden for æøå. Så problemet ligger nok ikke i MySQL.

 

Har også prøvd å endre på Kollasjonering i phpMyAdmin, men uten at det hjelper.

Endret av rolvs
Lenke til kommentar

En lett, men feil, løsning ville jo vært og konvertere dem til html karakter kode, og evt. konvertere dem tilbake når du skal printe dem ut.

Men dette vil nesten garantert komme til og skape mye irritasjon senere. Så anbefales ikke. For og ikke nevne at det er ekstra arbeid, som burde være unødvendig.

 

Hvis du går på database struktur i phpmyadmin, så burde det stå der om det er utf8 eller ikke.

Endret av Mriswith
Lenke til kommentar

MEN...

Kan prøve iso-8859-1 charset, da dette er ascii extended med æøå. PHP har egentlig ikke støtte for utf-8, og det kan bli rot med det.

Samme gjelder mysql, for den setter vel opp iso-8859-1 mener jeg på både charset i tabeller og i stream.

 

Kan hvertfall prøve deg med 8859 ... så kan du leke med utf og unicode senere når du blir litt mer stø på progginga.

Er ikke så lenge til PHP6 som skal komme med unicode støtte. Er mye snags med utf-8 skjønner du ...

Lenke til kommentar
<?php

        if ($_GET[tekst] != "") {

                echo "$_GET[tekst]";

                $dato=date("d/m/Y k\lokk\a G:i");

                $db = mysql_connect("localhost", "brukernavn", "passord");

                mysql_select_db("database",$db);

                $sql = mysql_query("INSERT INTO `innlegg` (`id`, `tid`, `tekst`) VALUES ('', '$dato', '$_GET[tekst]')");

        }

?>

Prøv utf8_decode(), har klart meg lenge med det. Prøv:

$tekst = utf8_decode($_GET[tekst]);
// og kanskje:
$tekst = mysql_real_escape_string($tekst); // tar vekk skumle tegn
....
$sql = mysql_query("INSERT INTO `innlegg` (`id`, `tid`, `tekst`) VALUES ('', 'NOW()', '$tekst')"); // se under for detaljer om NOW()

Tipper det holder.

 

Og et par ting:

- Kan være en idé å endre if ($_GET[tekst] != "") til if (!empty($_GET[tekst])). empty() sjekker om variabelen er tom eller lik null. Litt usikker på om empty() gir true tilbake hvis noen skriver '0' i tekstfeltet...

- Antar id i databasen din er auto_increment, men det kan være en idé å sette inn en reell verdi her. Har hatt litt kluss med dette før.

- Tror kanskje det hadde vært bedre å endre tid i databasen til DATETIME i stedet (YYYY-MM-DD HH:MM:SS), og sette 'NOW()' i stedet for '$dato' i INSERT-tingen (se eksempelet over igjen). Da legges automatisk timestampet for akkurat NÅH inn i stedet, og da kan du selv velge hvordan du vil det skal se ut når du henter det ut igjen. Pluss at det blir vesentlig lettere å endre.

- Kan være greit å ha med mysql_close($db); på slutten der, for å forsikre deg om at forbindelsen kuttes.

 

Ok, det var mye mer enn du spurte om, men jeg fikk ånden over meg.. :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...