Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
Добрый день! Запустил свой сайт на валидацию и выяснилось, что я нарушитель стандарта HTML5. Я оказывается должен код HTML писать в UTF-8. Полазил по интернету, терпеливо все PHP-файлы преобразовал в формат "UTF-8 (без BOM). Исправил все косяки, которые вылезли после перевода. Но одну проблему никак не могу решить Есть такой файл report.php: Код: php 1. 2. 3. 4. 5. Он всегда замечательно работал, пока PHP-был в формате ANSI. После перекодировки report.php в формат UTF-8 (без BOM), документ Word (который получается на выходе), не открывается. При попытке открыть сгенерированный файл появляется следующая надпись "Не удается открыть XML-файл report.php-1 из-за проблем с его содержимым... Сведения: Объявление text/xml может находиться только в самом начале входных данных. Error location: Line:2, Column: 55". Кто-нибудь сталкивался? Как это победить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 17:13 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
Алексей Смирнов, а что в report.xml ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 18:51 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
Алексей СмирновЕсть такой файл report.php: Код: php 1. 2. 3. 4. 5. Он всегда замечательно работал, пока PHP-был в формате ANSI.Сколько ни вглядывался, не увидел в этом коде ни одного символа национального алфавита. Соответственно, нормальная перекодировка никаким образом не должна повлиять на этот файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 19:13 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
Алексей СмирновКак это победить?Для начала есть смысл пристально посмотреть на отдаваемые заголовки и контент. Возможно, даже какой-нибудь HEX-смотрелкой. Мож где затесался BOM или лишний перевод строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 19:16 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
r uАлексей Смирнов, а что в report.xml ? report.xml я создаю из программы Microsoft Word 2003 с помощью команды "Сохранить как", выбираю расширение "xml". Этот файл загружаю в PHP строкой $strDoc = file_get_contents('report.xml'); Потом с помощью функции str_replace делаю поиск-замену некоторых участков текста (говоря простым языком в вордовский шаблон вставляю данные из базы данных). На выходе с помощью строк: header('Content-type: application/msword;'); echo $strDoc; Получаю готовый вордовский документ. Все счастливы...были до тех пор, пока я не узнал, что мой исходный код не угодил разработчикам стандарта html5. А мне не хочется возвращаться к стандарту HTML4, иначе буду комплексовать на тему использования старых стандартов в своих проектах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 20:02 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
vkleСколько ни вглядывался, не увидел в этом коде ни одного символа национального алфавита. Соответственно, нормальная перекодировка никаким образом не должна повлиять на этот файл.Сам поражаюсь. Здесь в UTF-8 перекодирован только сам файл report.php, который не содержит ни строчки HTML-кода. После этого одна из 3-х приведенных мной строк стала везти себя неадекватно. Я предполагаю, что функция echo. Возможно, что она в такой ситуации выдает браузеру что-то другое. Пробовал делать преобразования в ту и в другую сторону с помощью iconv и на выходе и на входе и по всякому. Пробовал добавлять в Header кодировку utf-8. Ничего не помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 20:05 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
vkleАлексей СмирновКак это победить?Для начала есть смысл пристально посмотреть на отдаваемые заголовки и контент. Возможно, даже какой-нибудь HEX-смотрелкой. Мож где затесался BOM или лишний перевод строки. Я просмотрел первые примерно 100 символов по-байтно с помощью функции ord(). Лишних символов не обнаружил. Переводы строки /r/t пробовал заменить на /r. Меняются, но результат тот же. Дальше уже копаться не стал, т.к. всё равно во внутренней структуре XML, сгенерированном вордом разобраться проблематично. Сейчас пришла идея попробовать не перекодировать сами php-файлы в UTF-8, просто научить функцию echo выдавать на выходе HTML-код в формате UTF-8. А базу данных, шаблон HTML и исходные коды проекта оставить в кодировке Windows-1251. Иначе переделывать базу данных и весь исходный код проекта просто проблематично. Кроме того пишут, что стандартные строковые функции PHP с кодировкой UTF-8 работать не будут и их все надо менять на другие функции. Уже не рад что связался, но другого пути нет. Стандарт HTML5 требует UTF-8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 20:13 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
Алексей СмирновНичего не помогает.Мало поможет, пока не уточните, что именно получается на выходе. Пока время и желание позволяет, можете смело действовать методом тыка или безосновательных предположений. Как вариант, восстановите из бекапа "живой" файл. Или перепишите все три строчки ручками с нуля (не используя копипаст). Хотя, можете потратить пару минут на сбор объективных данных, при помощи которых локализовать и устранить ошибку. Алексей Смирновперекодирован только сам файл report.php, который не содержит ни строчки HTML-кода. После этого одна из 3-х приведенных мной строк стала везти себя неадекватно.Сам отдаваемый 'report.xml' теоретически мог измениться в это же время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 20:22 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
Алексей СмирновПереводы строки /r/t пробовал заменить на /rОпечатка? Стандартный перевод /r/n, а не /r/t. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 20:24 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
Алексей Смирновнаучить функцию echo выдавать на выходе HTML-код в формате UTF-8 1. echo - это не функция (см. мануал), а конструкция языка. 2. про кодировку она понятия не имеет, что ей передали для вывода - то и отдаст как есть, включая бинарные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 20:27 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
vkleКак вариант, восстановите из бекапа "живой" файл. Или перепишите все три строчки ручками с нуля (не используя копипаст). Хотя, можете потратить пару минут на сбор объективных данных, при помощи которых локализовать и устранить ошибкуЯ согласен. Оставим этот вариант на крайний случай). vkleОпечатка? Стандартный перевод /r/n, а не /r/t.Ну да опечатка. vkle echo - это не функция (см. мануал), а конструкция языкаМануал как раз до этого за несколько минут смотрел. В русскоязычном переводе её называют функцией и по синтаксису параметры можно писать в круглых скобках, при этом уточняется, что т.к. это конструкция языка, то можно написать и без скобок. В общем, я написал функцию: Код: php 1. 2. 3. 4. 5. Заменил echo на echou() у себя на главной странице, ещё указал в заголовке HTML: <META http-equiv="content-type" content="text/html; charset=utf-8" /> При этом все файлы проекта и данные базы оставил в родной кодировке ANSI "Windows-1251". Прогнал через валидатор. Больше на utf-8 не ругается). Фокус удался в принципе. Не знаю к каким это приведет последствиям, дальше видно будет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 21:01 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
Алексей СмирновФокус удался в принципе. Не знаю к каким это приведет последствиям, дальше видно будет).Кстати, довольно распространённый фокус, нормально работает. Если файл xml будет периодически экспортироваться "из ворда" - это правильное решение, не потребуется его с той же периодичностью перекодировать вручную или отдельным скриптом. С другой стороны, если на одно обновление файла приходится тысяча его скачиваний, так не вижу смысла перекодировать его каждый раз на лету - достаточно и одного раза при сохранении. Продолжая тему излишеств, не вижу смысла и в использовании этого трёхстрочного скрипта (если, конечно, в нём нет чего-то ещё, чего мы не видим) - можно настроить вебсервер для отдачи требуемого Content-Type. О последствиях :-) Если же этот файл представляет часть проекта - ситуация прямо противоположная. Когда разные файлы сохранены в разной кодировке, последствия могут быть вызваны невнимательностью при использовании текстового редактора. Не все редакторы автоматически определяют кодировку. В некоторых случаях при правке где-то в начале файла, где глазами не видно кириллицы (она дальше, в конце), можно забыть указать в редакторе используемую кодировку. В таком случае после сохранения есть шансы получить полную невосстановимую потерю кириллического текста (помогает только восстановление из бекапа). Случается такое не часто, конечно, но, увы, когда-то сам нарывался, когда-то коллеги... Алексей Смирнов echo - это не функция (см. мануал), а конструкция языкаМануал как раз до этого за несколько минут смотрел. В русскоязычном переводе её называют функцией и по синтаксису параметры можно писать в круглых скобках,А Вы попробуйте написать в круглых скобках два или более параметра :-) И, да, где это в русскоязычной документации http://php.net/manual/ru/function.echo.php её функцией обозвали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 22:17 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2015, 15:42 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
vkleКстати, довольно распространённый фокус, нормально работает.Спасибо, это радует!) Проект весь мой, поэтому проблем с разными кодировками не будет. Вообще теперь сделал так, что весь HTML собирается в одну переменную, а на выходе всего-лишь один echo: Код: php 1. Хорошо, пусть echo будет конструкцией, я не против). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2015, 14:37 |
|
||
|
Функции PHP перестали работать после перевода текста файла в UTF-8
|
|||
|---|---|---|---|
|
#18+
vkleЕсли файл xml будет периодически экспортироваться "из ворда" - это правильное решение, не потребуется его с той же периодичностью перекодировать вручную или отдельным скриптом. С другой стороны, если на одно обновление файла приходится тысяча его скачиваний, так не вижу смысла перекодировать его каждый раз на лету - достаточно и одного раза при сохранении.В случае хранения файлов проекта *.php в кодировке ANSI проблема с XML отпадает сама собой, т.к. в этом случае документ на выходе получается нормальным. Даже ничего переделывать не пришлось. А XML из Word экспортируется в UTF-8 автоматически (я проверял в редакторе XML, там кодировка UTF-8 сразу стоит). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2015, 14:41 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38854627&tid=1462088]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
88ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 267ms |
| total: | 463ms |

| 0 / 0 |
