开发者

PHP: Inject iframe right after body tag

开发者 https://www.devze.com 2022-12-19 22:38 出处:网络
I would like to place an iframe right below the start of the body tag. This has some issues since the body tag can have various attributes and odd whitespace. My guess is this will will require regula

I would like to place an iframe right below the start of the body tag. This has some issues since the body tag can have various attributes and odd whitespace. My guess is this will will require regular expressions to do correctly.

EDIT: Th开发者_Go百科is solution has to work with php 4 & performance is a concern of mine. It's for this http://drupal.org/node/586210#comment-2567398


You can use DOMDocument and friends. Assuming you have a variable html containing the existing HTML document as a string, the basic code is:

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

To retrieve the modified HTML text, use

$html = $doc->saveHTML();

EDIT: For PHP4, you can try DOM XML.


Both PHP 4 and PHP 5 should be happy with 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];


Using regular expressions brings up performance concerns... This is what I'm going for

<?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);
?>

Thoughts?

0

精彩评论

暂无评论...
验证码 换一张
取 消