I had a simple spreadsheet with one cell containing this text "tá" (t and a with acute). The code returns just the second character - a-acute. The problem is in function characterData() of class ods. The PHP xmlparser code returns the text in two parts: t (0x74), and separate a-acute (0xc3 0xa1 - U+00E1). The code in function does an assignment causing the second part wiping out the first. Changing the code line around 188 and 192 ($this->sheets ...) to concatenation (.=) appears to fix the problem.