I was having problems with special chars in UTF-8 encoded file names. I found, that the Zip spec seems to specify IBM437 as valid encoding.
Doing:
<?php
//...
$filename = 'exämple.ext';
$encodedFilename = iconv('utf-8', 'IBM437', $filename);
$zip->addFromString($encodedFilename, 'foo');
//...
?>
fixed those problems for me.