G2Petter Skrevet 3. september 2008 Del Skrevet 3. september 2008 Det kan godt hende det er en grunn til dette, men strlen() oppfører seg forskjellig avhengig av hvilket tegnsett som brukes. Her er et banalt eksempel: <?php header('Content-Type: text/html; charset=utf-8'); function telltegn($tekst) { return strlen($tekst); } ?> <html> <head> <title>strlen()</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <form id="name_form" method="post" action=""> <label for="text_input">Tekststreng</label><input type="text" value="" name="text_input" /> <input type="submit" value="Tell antall tegn!" name="submit" /> </form> <p> <?php if(isset($_POST['submit'])) { echo 'Lengden på strengen: '.telltegn($_POST['text_input']).'<br />'; } ?> </p> </body> </html> Dersom jeg skriver inn "æøå" i tekstfeltet forteller den meg at strengen er 6 tegn. Det gir mening fordi den består av 6 byte, og fordi jeg burde brukt mb_strlen() for å finne lengden på denne strengen. Dersom jeg fjerner content-headeren i toppen returnerer funksjonen plutselig 3. Er det noen god grunn til dette? Lenke til kommentar
Ernie Skrevet 3. september 2008 Del Skrevet 3. september 2008 (endret) Jepp, det er en meget god grunn til det. strlen teller antall byte i og med at den er beregnet for «single byte» tegnsett (hvor byte=char). Skal man jobbe med «multibyte» tegnsett bruker man mbstring og funksjonene mb_strlen. Denne forutsetter gyldig bruk av tegnsettet så mb_check_encoding er også nødvendig hvis du ikke validerer det manuelt. Red.: Gikk litt kjapt i svingene her. Problemet er at nettleseren sender inn data i det tegnsettet den tror blir bruk. Når du ikke oppgir noe så sender webserveren enten ut ISO-8859-1 som standard, eller nettleseren antar det er det du ønsker. Endret 3. september 2008 av Ernie Lenke til kommentar
G2Petter Skrevet 3. september 2008 Forfatter Del Skrevet 3. september 2008 Ok, jeg ser nå at dersom jeg setter charset til ISO 8859-1 så teller den riktig, men hvordan kan ha seg? Representerer det tegnsettet bokstavene æøå med kun en byte hver? Lenke til kommentar
Ernie Skrevet 3. september 2008 Del Skrevet 3. september 2008 Ja, ISO-8859-1 er et «singlebyte»-tegnsett. Lenke til kommentar
G2Petter Skrevet 3. september 2008 Forfatter Del Skrevet 3. september 2008 OK, da skjønner jeg hva det går i. Takk skal du ha. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå