substr with Greek characters

character-encoding, php, substr

Solution

$thedoc = mb_substr($string, 0, 3, 'UTF-8'); 

You need to use `mb_substr` instead of `substr`, and you need to set the internal encoding of PHP used in this context to UTF-8.

The `substr` function is based on a simple character model where each character is one 8-bit byte. Using just `substr($string, 0, 3)`, you get the first 3 bytes of the string. A Greek letter in UTF-8 encoding takes two bytes, so you get alpha (α) and “half of” beta, the first byte in its internal representation, which is not valid UTF-8 data and is thus displayed using the “replacement character” � (an indication of character level data error).

In practice, you could alternatively use `substr($string, 0, 6)`, getting the first 6 bytes (3 characters), but this is an ugly way and relies on the text being specifically in letters that each take 2 bytes in UTF-8, so it would not work e.g. for mixed Latin and Greek text. It is much better to use an approach that can handle any UTF-8 data.

Problem

I have 5 greek characters in a string. After I use substr in php the output is something like that α�. It should be αβγ. Any suggestions about encoding? I have tried header ('Content-type: text/html; charset=utf-8'); with no result. ``` <?php $string = "αβγδε"; $thedoc = substr($string, 0, 3); echo $thedoc."<br/>"; ?> ```

Original source

Related problems