PHP: вставлять iframe сразу после тега body - PullRequest
2 голосов
/ 07 февраля 2010

Я хотел бы разместить iframe прямо под началом тега body. Это имеет некоторые проблемы, поскольку тег body может иметь различные атрибуты и нечетные пробелы. Я думаю, это потребует регулярных выражений для правильной работы.

РЕДАКТИРОВАТЬ: Это решение должно работать с PHP 4 и производительность моя проблема. Это для этого http://drupal.org/node/586210#comment-2567398

Ответы [ 3 ]

5 голосов
/ 07 февраля 2010

Вы можете использовать DOMDocument и друзей. Предполагая, что у вас есть переменная html, содержащая существующий HTML-документ в виде строки, основной код:

$doc = new DOMDocument();
$doc->loadHTML(html);
$body = $doc->getElementsByTagName('body')->item(0);
$iframe = $doc->createElement('iframe');
$body->insertBefore($iframe, $body->firstChild);

Чтобы получить измененный текст HTML, используйте

$html = $doc->saveHTML();

РЕДАКТИРОВАТЬ: Для PHP4, вы можете попробовать DOM XML .

4 голосов
/ 07 февраля 2010

И PHP 4, и PHP 5 должны быть довольны preg_split () :

/* split the string contained in $html in three parts: 
 * everything before the <body> tag
 * the body tag with any attributes in it
 * everything following the body tag
 */
$matches = preg_split('/(<body.*?>)/i', $html, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 

/* assemble the HTML output back with the iframe code in it */
$injectedHTML = $matches[0] . $matches[1] . $iframeCode . $matches[2];
0 голосов
/ 14 февраля 2010

Использование регулярных выражений вызывает проблемы с производительностью ... Это то, что я собираюсь сделать

<?php
$html = file_get_contents('http://www.yahoo.com/');
$start = stripos($html, '<body');
$end = stripos($html, '>', $start);
$body = substr_replace($html, '<IFRAME INSERT>', $end+1, 0);
echo htmlentities($body);
?>

Мысли

...