2
我想劈成两半的文本字符串,被铭记不:拆分HTML两种用PHP
- 突破的话
- 突破HTML
为了给你一个有点背景,我想写一篇博客文章,并在它的中间插入广告。
我周围到处寻找一个答案,但唯一的选择,我可以找到SO建议剥离所有HTML - 这是不是一个选项...
例子:
$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
感谢@Naga的回答!对于需要它的人来说,这是一个稍微更加扩展的版本:
$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 ++;
}