If like myself you have been turning the interwebz upside down looking for a solution for this issue:
PHP Warning: XMLReader::read(): /tmp/xml_feed.xml:4183934: parser error : Input is not proper UTF-8, indicate encoding !
For some reason, this warning breaks the execution - is it a fatal error in disguise?
After days of frustration I found it!!!!
tidy -xml -o output.xml -utf8 -f error.log input.xml
You can invoque tidy using exec, It takes several seconds to convert a 250Mb feed, but it worthy the time.
In my case the issue was with latin1 charset, and for some reason I had to pass the xml through tidy 2 times - first time around creates new errors, second time it fixes everything.
I know invalid xml should be fixed by xml creators, but it works differently in the real world.