Ich versuche, einen Text-String in zwei Hälften geteilt, aufmerksam zu sein, um nicht:Split HTML in zwei mit PHP
- Pause Wörter
- Pause html
Um Ihnen ein etwas Hintergrund, ich möchte einen Blog-Artikel nehmen und eine Anzeige in der Mitte davon spritzen.
Ich habe um eine Antwort gejagt, aber die einzigen Optionen finde ich auf SO vorschlagen alle HTML-Stripping - das ist keine Option ...
Beispiel:
$string = "<div class='some-class'>Deasdadlights blasdasde holysadsdto <span>Bri<img src='#'>cable holystone blow the man down</span></div>";
$length = strlen($string);
// At this point, something magical needs to split the string being mindful of word breaks and html
$pieces = array(
substr($string, 0, ($length/2)),
substr($string, ($length/2), $length)
);
echo $pieces[0] . " **Something** " . $pieces[1];
// <div class="some-class">Deasdadlights blasdasde holysadsdto <spa **something**="" n="">Bri<img src="#">cable holystone blow the man down</spa></div>
// And there goes the <span> tag :'(
UPDATE
Vielen Dank @Naga für die Antwort! Hier ist eine etwas erweiterte Version für jeden, der es:
$string = '
<section class="post_content">
<p>Often half the battle is ensuring you get the time to respond to your reviews, the other half is remembering that the customer is always right and you should proceed with caution.</p>
<p>Some simple principles to keep in mind are to be <strong>positive</strong>, <strong>humble</strong>, <strong>helpful</strong>, and <strong>enthusiastic</strong>.</p>
<p>Some simple principles to keep in mind are to be <strong>positive</strong>, <strong>humble</strong>, <strong>helpful</strong>, and <strong>enthusiastic</strong>.</p>
</section>
';
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
libxml_use_internal_errors(true);
$dom->loadHTML($string); // $string is the block page full/part html
$xpath = new DOMXPath($dom);
$obj = $xpath->query('//section[@class="post_content"]'); // assume this is the container div that where you want to inject
$nodes = $obj->item(0)->childNodes;
$half = $nodes->length/2;
$i = 0;
foreach($nodes as $node) {
if ($i === $half) {
echo "<div class='insert'></div>";
}
echo $node->ownerDocument->saveHTML($node);
$i ++;
}