substr is counting using bytes, and not characters.
greek probably means you are using some multi-byte encoding, like UTF-8 -- and counting per bytes is not quite good for those.
Maybe using mb_substr could help, here : the mb_* functions have been created specifically for multi-byte encodings.