Я пытаюсь загрузить сайт для просмотра в автономном режиме, и это требует от меня выполнения ряда манипуляций с DOM (поверьте мне, wget просто не делает то, что мне нужно ...).
Я обнаружил, что веб-страницы, содержащие теги с необычным текстовым содержимым, отключают saveHTML .
Для некоторых URL, если я использую curl, чтобы прочитать страницу и вывести ее как
echo $contents;
тогда все хорошо.
Например, есть раздел страницы, содержащий следующий источник:
<div id="area2516" class="component interaction_component float-none clear-none ">
<div id="area2516">
<script type="text/javascript">
window.bm = window.bm || {};
bm.data = bm.data || [];
bm.data['area2516'] = {};
</script>
<link rel="stylesheet" type="text/css" href="/somecss.css">
<script type="text/javascript" src="somejs.js">
</script>
<script class="main-template" type="text/x-handlebars-template">
<div class="content_area">
<div class="bg_image cf"></div>
{{#each rollovers}}
<div class="rollover_content" style="left: {{x}}; top: {{y}}; display: none;" data-rollover-id="{{id}}">
{{{this.content}}}
</div>
{{/each}}
</div>
<div class="rollover_links">
<ul>
{{#each rollovers}}
<li>
<a class="rollover_link" href="#" data-rollover-id="{{id}}">
{{{link}}}
</a>
</li>
{{/each}}
</ul>
</div>
</script>
<script type="text/javascript">
bm.data['area2516'].assets = {};
bm.data['area2516'].initial_json = '';
</script>
, как видно из вышеприведенного эха, после отклика скручивания.
Теперь, еслиЯ делаю это
$doc = new DOMDocument();
@$doc->loadHTML($contents);
$xpath = new DOMXpath($doc);
echo $doc->saveHTML();
HTML-код запутался , так что теперь выше становится так:
<div id="area2516" class="component interaction_component float-none clear-none ">
<div id="area2516">
<script type="text/javascript">
window.bm = window.bm || {};
bm.data = bm.data || [];
bm.data['area2516'] = {};
</script>
<link rel="stylesheet" type="text/css" href="/somecss.css"> .
<script type="text/javascript" src="/somejs.js"></script>
<script class="main-template" type="text/x-handlebars-template">
<div class="content_area">
<div class="bg_image cf">
</script>
</div>
{{#each rollovers}}
<div class="rollover_content" style="left: {{x}}; top: {{y}}; display: none;" data-rollover-id="{{id}}">
{{{this.content}}}
</div>
{{/each}}
</div>
<div class="rollover_links">
<ul>
{{#each rollovers}}
<li>
<a class="rollover_link" href="#" data-rollover-id="{{id}}">
{{{link}}}
</a>
</li>
{{/each}}
</ul></div>
<script type="text/javascript">
bm.data['area2516'].assets = {};
bm.data['area2516'].initial_json = '';
</script>
Извините за форматирование, этот новый редактор довольнораздражает.Дело в том, что вы можете увидеть некоторые довольно существенные различия, и я не уверен, как saveHTML вызывает эту модификацию для источника .Я подозреваю, что это как-то связано с кодированием и особенностью этих двойных и тройных скобок, используемых системой шаблонов, но, несмотря на попытки использовать различные параметры кодирования, я получаю тот же результат.Тогда я подумал, что, может быть, что-то связано со специальными символами, экранированием, но я просто не уверен, какие функции необходимы для того, чтобы мешать saveHTML портить вывод.
Идеи?
Спасибо