Question

Je voudrais placer une iframe ci-dessous à droite le début de la balise body.Cela a des problèmes depuis le corps de la balise peut avoir différents attributs et les espaces.Ma conjecture est que cela nécessitera des expressions régulières pour le faire correctement.

EDIT:Cette solution a fonctionne avec php 4 et de la performance est une de mes préoccupations.C'est pour cette http://drupal.org/node/586210#comment-2567398

Était-ce utile?

La solution

Les deux PHP 4 et PHP 5 devraient être heureux avec 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];

Autres conseils

Vous pouvez utiliser DOMDocument et des amis.En supposant que vous avez une variable html contenant le document HTML existant comme une chaîne de caractères, le code de base est:

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

Pour récupérer le HTML modifié le texte, utilisez

$html = $doc->saveHTML();

EDIT:Pour PHP4, vous pouvez essayer DOM XML.

Utilisation d'expressions régulières évoque les problèmes de performances ... C'est ce que je vais pour

<?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);
?>
Pensées

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top