Gå til innhold

strlen() og forskjellige tegnsett


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Ernie
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...