Неожиданные результаты при обработке строк в PHP - PullRequest
0 голосов
/ 14 февраля 2012

Спасибо, что уделили мне время.

Справочная информация. Я обрабатываю файлы OFX / QFX для проекта личных финансов.Я написал код на C #, и он выполняется отлично.Я могу создать свой объект импорта, построчно обработать файл OFX / QFX и вывести вышеупомянутый объект на консоль.Однако я портирую это на PHP для использования в веб-приложении, которое не написано на .Net Framework.

Проблема: файл загружен пользователем и передан в мой файл PHP.При чтении файла построчно с помощью $line = fgets($file); я не получаю ожидаемых результатов.Я точно знаю, что файл открыт и что строка читается.Тем не мение;когда я ставлю var_dump($line) сразу после присвоения переменной, я получаю "string(15) "ENG "", когда я должен получить:

<LANGUAGE>ENG

Моя модель обработки сильно зависит от способности читать часть тега строки,но поскольку PHP, похоже, удаляет его, мой код работает не так, как ожидалось.

Вопрос: Кто-нибудь может сказать мне, почему я не получаю полное строковое значение при использовании fgets ()?Также есть ли более правильный способ сделать это?Я достаточно хорошо разбираюсь в .Net, но PHP для меня немного нов, поэтому я предполагаю, что это всего лишь причуда языка PHP, которого я не понимаю.

Спасибо

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

Проблема в том, что <LANGUAGE> анализируется браузером, считается недействительным тегом HTML и игнорируется.

Щелкните правой кнопкой мыши источник просмотра в браузере, чтобы просмотреть реальный вывод.

0 голосов
/ 14 февраля 2012

Я бы рискнул предположить, если <LANGUAGE>ENG - это то, что вы ожидаете вывести на экран, то, вероятно, это так.Ваш веб-браузер увидит это и попытается проанализировать его как тег и отобразит только данные, связанные с этим тегом, а не сам тег.Не проблема с PHP.Попробуйте повторить строку, используя предварительные теги

<code>echo '<pre>' . $line . '
';
0 голосов
/ 14 февраля 2012

Как вы можете видеть из результата var_dump (), это строка длиной 15 символов. Возможно, ваша проблема в том, что тег <LANGUAGE> не отображается, но отображается там.

Попробуйте использовать htmlspecialchars($line);. Но я обычно рекомендую использовать var_dump (), так как он очень четко показывает тип и длину значения переменной.

...