php在500个单词后将字符串插入html?包括html标签


php insert string into html after 500 words? include html tags

如何在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>');

它应该是regexp将每个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];
}