- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Доброго времени суток.
Данный код
отлично работает на большинстве HTML документов. Но проблемка в том что из данного кода
после сохранения получается следующее:
</div>
</div>');
Лишние переводы строк перед </div> нарушают целостность JS кода, появляется незавершенная строка, </script> там где его не было и еще много интересного. При этом в конце кода </script> пропадает и кусок кода отображается текстом.
Воспроизводится на любом подобном HTML коде, где в кавычки включен HTML, независимо от значения параметров domDocument: preserveWhiteSpace, formatOutput, validateOnParse, recover. От платформы и версии PHP не зависит (изначально писал под Denwer, на реальном сервере под Linux все то же). Баг? У кого-то есть мысли как с этим бороться без написания собственного парсера?
из данного кода
Данный код - какая-то лапша
css({toppos['top'])+'px',leftpos['left'])+'px',width.offsetWidth+'px',height.offsetHeight+'px',display:''})Разберитесь со скобками.Пусть и лапша, проблема в DOM парсере, он должен всю лапшу оставлять внутри <script> и </script>. Вот другой пример исковерканого кода:
Было:
Стало:
</div>');
Если сделать обратную замену </script>\r\n</div>'); на </div>'); не составляет труда, то написать код который будет определять универсальным образом то место куда нужно вставить пропавший </script> - не реально.
Пусть и лапша
А какой смысл запихивать в парсер заведомо невалидный код? Хотите проверить, как парсер исправляет ошибки? Так он и наисправляет, исходя непонятно из каких соображений.
Моя задача из заведомо правильного либо неправильного HTML документа (это я не знаю) сделать правильный, почищенный от мусора. Мусор чистится нормально, проблема возникает только при наличии </div> внутри JS кода.
проблема возникает только при наличии </div> внутри JS кода.
Поставьте </nav> вместо </div> - то же самое будет. Проблемы не в div, а в <script>. ХЗ в чём там дело, но у domDocument всегда были проблемы со скриптами.
Он ищет любые закрывающие теги, находит его в теле строковой константы, далее понимает что раз тег закрывается значит это незакрытый <script>, закрывает его и ставит перевод строки, после чего крашится вся разметка. Отключить "исправление" таких "ошибок", по видимому, нельзя. Для меня это новость потому что не первый год работаю с DOMDocument, да, скармливал ему обычно отрывки документов, выводы из визуальных редакторов и прочие дела, но почти никогда всю страницу целиком, но даже если целиком (задача была извлечения текста статьи из HTML кода с определением тега внутри которого содержится контент) то таких приколов не было...
Пусть и лапша, проблема в DOM парсере
Не стал сильно разбираться, но в глаза бросилась проблема со скобками. Одна открывающая и три закрывающих.
Да это пример одного из сбойных кодов... на вход парсеру может подаваться все что угодно, главное чтобы это правильно обрабатывалось. Выше я привел другой пример абсолютно валидного кода, но который тоже валится. Сейчас буду пробовать альтернативные решения в других языках программирования, потому что это не дело.