Удаление шестнадцатеричных символов из xml-файла с помощью php - PullRequest
1 голос
/ 10 августа 2010

Итак, для начала у меня есть массив файлов XML.Эти файлы должны быть повторены и проверены на наличие определенных «нераспознанных» шестнадцатеричных символов и заменены обычным текстом UTF-8, или каким-то другим заполнителем.

Я пробовал перебирать файлы и заменять шестнадцатеричные кодыиспользуя и str_replace и preg_replace без удачи.Моя конечная проблема заключается в том, что я получаю ошибки о «не-UTF-символах» при попытке открыть эти файлы с помощью simpleXML.

Вот что у меня есть:

class HexadecimalConverter {

    public $filenames = array();

    public function __construct($filenames) {

        $this->filenames = $filenames;
        $this->removeHex();

    }

    public function removeHex() {

        foreach ($this->filenames as $key => $value) {

            $contents = file_get_contents($value);

            $contents = preg_replace("/\x96/", '–', $contents);
            $contents = preg_replace("/\x97/", '—', $contents);
            $contents = preg_replace("/\x85/", "...", $contents);
            $contents = preg_replace("/\xBA/", "", $contents);

            file_put_contents($value, $contents);

        }

    }

}

Вотошибка, которую я пытаюсь исправить: Предупреждение: simplexml_load_file () [function.simplexml-load-file]: ./04R_P455_S1157.xml:5: ошибка синтаксического анализатора: неверный ввод UTF-8, укажите кодировку!Байт: 0x97 0x0D 0x0A 0x69 в C: \ xampp \ htdocs \ hint_updater \ library \ hint_updater_classes.php в строке 130

Все еще не повезло, я попробовал все предложенное в этой теме, но preg_replace этого не делаетпохоже, заменяет все экземпляры шестнадцатеричного кода.

Ответы [ 2 ]

0 голосов
/ 10 августа 2010

preg_replace возвращает новую строку.

Попробуйте $contents = preg_replace("/\x96/", '–', $contents); и т.п..

0 голосов
/ 10 августа 2010

Сначала вы должны прочитать preg_replace документы. Они четко заявляют, что функция возвращает измененную строку, поэтому вам придется изменить каждую строку preg_replace в вашем коде на $contents = preg_replace(...);, чтобы ваши замены работали. Прямо сейчас вы делаете замену, но выбрасываете полученную строку, и, таким образом, в конце вы записываете исходную строку обратно в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...