如何在 500 字后插入一些字符串到 html 中? (不要破坏 html 标签)
function insert_string($text,$length,$insert) {
preg_match_all('/<[^>]+>([^<]*)/',$text,$m,PREG_OFFSET_CAPTURE|PREG_SET_ORDER);
foreach($m as $i=>$o){
if($o[0][1]-$i>=$length)
break;
$t=substr(strtok($o[0][0]," \t\n\r\0\x0B>"),1);
// ... can not think how to write continue.
}
//...
return $output;
}
echo insert_string($text,'500','<strong> related tags </stong>');
应该将每个html标签正则表达式循环,记住某个位置和strlen()文本长度,然后确定在哪里插入一些字符串。但我想不出如何继续写下去。需要帮助。谢谢。
最佳答案
我刚刚发现我曾经或多或少遇到过类似的问题。我修改了我的编码,所以它(希望)解决了你的问题。 它并不完美,但对我有用:
//start 'config
$string = '<div id="mw-content-text"><p>Lorem ipsum</p><p><b>dolor</b> sit</p><p>amet</p></div>';
$words = array();
$insert_after_x_words = 3;
$insert_string = '<br>INSERT YOUR STUFF HERE<br>';
//end 'config'
$needle = '<';
$positions_tagopen = array();
$lastPos = 0;
while (($lastPos = strpos($string, $needle, $lastPos))!== false) {
array_push($positions_tagopen, $lastPos);
$lastPos = $lastPos + strlen($needle);
}
$needle = '>';
$positions_tagclose = array();
$lastPos = 0;
while (($lastPos = strpos($string, $needle, $lastPos))!== false) {
array_push($positions_tagclose, $lastPos);
$lastPos = $lastPos + strlen($needle);
}
$current_pos = 0;
for($i = 0; $i < count($positions_tagopen); $i++)
{
$current_substring = substr($string,$current_pos,$positions_tagopen[$i]-$current_pos);
$tmp = explode(" ",$current_substring);
for($i2 = 0; $i2 < count($tmp); $i2++)
{
if(strlen($tmp[$i2])>0)
{
if($i2+1<count($tmp))
{
$tmp[$i2] = $tmp[$i2]." ";
}
array_push($words, $tmp[$i2]);
}
}
array_push($words, html_escape(substr($string,$positions_tagopen[$i], $positions_tagclose[$i]-$positions_tagopen[$i]).'>'));
$current_pos = $positions_tagclose[$i]+1;
}
for($i = 0; $i < count($words); $i++)
{
if(($i)%$insert_after_x_words == 0 && $i > 0)
{
echo $insert_string;
}
echo $words[$i];
}
关于php 在 500 字后将字符串插入到 html 中?包含 html 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25673437/