Web & Software Developer

Fix International Characters Encoding For FPDF Output

If you use the jQuery Autocomplete widget with GeoNames webservice for city names, you’ll find that city names use a bunch of non-ASCII, ISO 8859-x characters that don’t display properly in FPDF documents. I’m using FPDF to generate a PDF that uses city names from GeoNames. The following city names have international characters that output strange characters.

Gotenica, Kočevje, Slovenia outputs:

Gotenica, Kočevje, Slovenia

Sokal’, L’vivs’ka Oblast’, Ukraine outputs:

Sokal’, L’vivs’ka Oblast’, Ukraine

Litu, Läänemaa, Estonia outputs:

Litu, Läänemaa, Estonia

Gothenburg, Västra Götaland, Sweden outputs:

Gothenburg, Västra Götaland, Sweden

Plungė, Lithuania outputs:

PlungÄ—, Lithuania

Bucharest, BucureÅŸti, Romania outputs:

Bucharest, BucureÅŸti, Romania

So, to fix this, I do this before I output the city name in FPDF.

setlocale(LC_CTYPE, 'en_US');
$converted_cityName = iconv('UTF-8', 'ASCII//TRANSLIT', $cityName);

// now you can output the converted city name to pdf
$pdf->Cell(0, 0, $converted_cityName, 0, 1, C);

If you want more information on why this wrongful encoding of non-ASCII characters turns them into “garbage characters”, here is a good post explaining it: Fixing common Unicode mistakes with Python — after they’ve been made


We've One Response

Questions and Comments are Welcome

Your email address will not be published. All comments will be moderated.

Please wrap code in "code" bracket tags like this: