webForumDet fria alternativet

Skriva ut "å" med imagechar och substr?

PHP

3 svar · 217 visningar · startad av muskot

Medlem sedan jan. 20027 905 inlägg
Frågan#1

Nu har jag problem igen, så jag provar att posta igen och hoppas att det går lika bra som förra gången :).

Med denna kodsnutt vill jag skriva alla tecken i $string till en bild. Problemet är att "å" ersätts av "í".

<?php
$string = "ååå";
$im = imagecreate(600, 20);
$bg = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);

$i = 0;
$x_pos = 0;
while (strlen($string) > $i) {
	imagechar($im, 2, $x_pos, 0, $string{$i}, $black); // skriver ut "ííí"
	$x_pos = $x_pos + 5;
	$i++;
}

header('Content-type: image/png');
imagepng($im);
?>

För att felsöka har jag testat lite olika varianter. Med nedanstående kod får jag in "å" i bildfilen, men förstås endast första tecknet i strängen (vilket tyder på att imagechar() inte har problem med tecknet "å"):

<?php
$string = "ååå";
$im = imagecreate(600, 20);
$bg = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);

imagechar($im, 2, 0, 0, $string, $black); // skriver ut "å"

header('Content-type: image/png');
imagepng($im);
?>

Denna kodsnutt skriver i textformat ut alla tecken korrekt (vilket tyder på att substr() inte har problem med tecknet "å"):

<?php
$string = "ååå";
$im = imagecreate(600, 20);
$bg = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);

$i = 0;
while (strlen($string) > $i) {
	echo $string{$i}; // skriver ut "ååå"
	$i++;
}
?>

Det verkar alltså vara kombinationen av imagechar() och substr() som strular. Har testat både substr($string, $i, 0) och $string{$i}, med samma resultat.

Hur löser jag detta?

Medlem sedan juli 20023 617 inlägg
#2

Vad får du om du använder imagestring?

Om typsnittet som används inte innehåller å får man istället í. Det känns märkligt att du skulle få ett å med imagechar.

Medlem sedan aug. 20002 975 inlägg
#3

Vet inte om fiddler glömde ett inte i sitt inlägg, annars håller jag med.

Använder man imagestring() finns inget å i den teckentabell som PHP använder. Det är förmodligen samma teckentabell som imagechar() använder.

Fonten går dock att byta ut. Kollar du i manualen på imagestring finns det där länkar till sida som visar hur det går till, samt fonter du kan använda.

Medlem sedan jan. 20027 905 inlägg
#4

Mystiskt, när jag körde ovanstående kod i dag lyckades jag inte få imagechar() att skriva ut å. Det går ju ihop med det ni skriver, men samtidigt skulle jag nästan kunna ta gift på att kodsnutt #2 fungerade igår. Måste ha varit väldigt trött :)...

Nu är iaf. problemet löst, använde imagettftext() istället för imagechar().

265 ms totalt · 4 externa anrop · v20260731065814-full.868a69e5
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)