Это примитивное исправление, и я уверен, что есть лучший способ сделать это, но:
$str = str_replace( array( "“" , "”" ) , '"' , $str );
Это должно заменить эти стилизованные кавычки простой кавычкой и предотвратить проблему с вопросительным знаком.
(Рад узнать более лучшие, более умные решения, чем этот неуклюжий.)
Пересмотрено на основе комментариев ниже:
$str = str_replace( array("\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x98", "\xe2\x80\x99") , '"' , $str );
Вы можете заменить несколько шаблонов.(хранится в массиве) с той же строкой замены, использующей эту функцию - лучше, чем заполнять массив с тем же содержимым или создавать неуклюжую функцию, когда она не нужна.