Gå til innhold

Garanti's hjelpetråd til PHP


Anbefalte innlegg

Gjest Slettet+6132

phpMyAdmin er da kompatibel med UTF-8, grunnen til at bokstavene ser rare ut er fordi de er lagret med ett tegnsett og vist med et annet. Sjekk egenskapene for tabellene/databasen.

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+6132

Du må velge UTF-8 før du legger inn data i tabellen om jeg ikke tar helt feil. Om du endrer til UTF-8 etter at det er lagt data i tabellen vil de gamle dataene fortsatt være i det gamle tegnsettet, tror jeg hvertfall.

Lenke til kommentar

Det er bare tull, min phpadmin er stilt inn på utf-8 og jeg er 100% sikker på at det er riktig tegnsett før jeg legger det inn i databasen, men alike vel så vises det rarer tegn inne i selve phpadmin.

 

Når jeg henter det ut, funker det fint igjen.

Jeg nekter å tro at det bare er jeg som har det sånn.

Lenke til kommentar
Gjest Slettet+6132

Selv om du har det slik er det ikke slik det skal være, phpMyAdmin skal støtte UTF-8, så om du får rare tegn i phpMyAdmin har du gjort noe feil. Har du prøvd å velge English (UTF-8) som språk på login-siden?

 

PS: Det heter phpMyAdmin, ikke phpadmin.

Lenke til kommentar

Det kommer nok av at man ikke er konsekvent nok i forhold til tegnsett.

 

Dette sto her før, men er «overkill»

mysql_query("SET NAMES 'utf8'");
mysql_query("SET collation_connection='utf8_danish_ci'");
mysql_query("SET collation_server='utf8_danish_ci'");
mysql_query("SET character_set_client='utf8'");
mysql_query("SET character_set_connection='utf8'";
mysql_query("SET character_set_results='utf8'");
mysql_query("SET character_set_server='utf8'");

 

mysql_query("SET NAMES 'utf8' COLLATE='utf8_danish_ci'");
mysql_query("SET character_set_server='utf8'");

Skal man være bombesikker på at utf8 blir brukt må hver eneste av de begge linjene der (e.l. tilsvarende) kjøres før man jobber med data til/fra MySQL. Verdt å merke seg at dataene må kjøres inn i databasen på nytt for at ting blir riktig, hvis man har «tabbet» seg ut på punktet.

 

Red.: SET NAMES kan sannsynligvis utelukkes siden den teknisk sett skal sette character_set_client, character_set_connection og character_set_result. Dog, merkelignok fungerer det ikke å utelukke de linjene og kjøre SET NAMES i stedet :dontgetit:

 

Red.2: Hmf! Nå fungerte det plutselig. Jaja. Uannsett, collation kan såklart settes i SET NAMES, og character_set_client, character_set_connection og character_set_result. Problemet er bare det at character_set_server ikke blir satt og må settes spesifikt. Da ble ting litt mer riktig tror jeg :yes:

Endret av Ernie
Lenke til kommentar

Så kan jeg gjøre sånn?

<?php
mysql_connect("localhost", "root", "passwd") or die(mysql_error());
mysql_select_db("cee") or die(mysql_error());

// Lage tablen users
mysql_query("CREATE TABLE users(
SET NAMES 'utf8' COLLATE='utf8_danish_ci',
SET character_set_server='utf8',
id INT NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(id),
UserName VARCHAR(30), 
PassWord VARCHAR(30),
PostCount INT)")
or die(mysql_error());  
echo "table 'users' created successfully";
?>

 

EDIT: Nei, det kan jeg vel ikke. Hjelp! Hvordan lager man forresten en database gjennom PHP? Vet kun hvordan man lager det gjennom phpMyAdmin.

Endret av Garanti
Lenke til kommentar

Nei, det er ikke slik du skal gjøre det. SET skal kjøres som separate spørringer hver gang du kommuniserer med MySQL. Skal du spesifisere tegnsett og «collation» for en tabell gjøres dette slik:

CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(id),
UserName VARCHAR(30), 
PassWord VARCHAR(30),
PostCount INT)
DEFAULT CHARACTER SET utf8 COLLATE utf8_danish_ci;

 

Forøvrig er det etter min mening en dårlig ide å la script opprette tabeller og databaser (litt synd hvis man er sårbar for SQL-injections for å si det sånn). Hvis du dog så absolutt må lage en database via script ser det slik ut:

CREATE DATABASE navnPåNyDatabase DEFAULT CHARACTER SET utf8 COLLATE utf8_danish_ci;

 

PS: Dokumentasjon er til for å leses ;)

Lenke til kommentar

Virker fortsatt ikke! :(

make_table_users.php:

<?php
mysql_connect("localhost", "root", "sofa") or die(mysql_error());
mysql_select_db("cee") or die(mysql_error());

// Lage tablen users
mysql_query("CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
UserName VARCHAR(30),
PassWord VARCHAR(30),
PostCount INT)
DEFAULT CHARACTER SET utf8 COLLATE utf8_danish_ci;")
or die(mysql_error());  
echo "table 'users' created successfully";

 

Slik har jeg definert encoding i becomeuser.php <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />, og accept-charset="utf-8" i alle forms.

Endret av Garanti
Lenke til kommentar
Beklager at jeg virket uklar. Nei, ingen feilmeldinger, men æøå funker fortsatt ikke i mySQL.
Husket å kjøre
mysql_query("SET NAMES 'utf8' COLLATE='utf8_danish_ci'");
mysql_query("SET character_set_server='utf8'");

på tilkoblingen før du har satt inn/hentet ut dataene? Prøvd å sette UTF8 spesifikt i HTTP-header (header('Content-Type: text/html; charset=utf-8'))?

 

 

Prøv å legge inn dataene med utf8_encode() eller utf8_decode(), og se om det hjelper?

:no: Det har med saken å gjøre? De funksjonene er beregnet for konvertering mellom UTF8 og ISO-8859-1. Mao. sliter den litt med f.eks 'Iñtërnâtiônàlizætiøn'.

Lenke til kommentar

Tja, det var ikke særlig tungvindt likevel:

$NorCharFind = array ("/æ/", "/Æ/", "/ø/", "/Ø/", "/å/", "/Å/");
$NorCharRepl = array ("æ", "Æ", "ø", "Ø", "å", "Å");
echo preg_replace($NorCharFind, $NorCharRepl, $somestring);

 

Men er det noen som kan hjelpe meg med en filopplastingsscript som legger en fil i ønsket mappe, og navngir den med counter? Dvs. at den sjekker navnene på eksisterende filer før den legger til neste fil, som vil få høyeste nummer?

Endret av Garanti
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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...