завершать длинные слова или длинные символы, игнорируя теги html

Мне нужно обернуть длинные слова, каждый в тегах span, например:

$string = 'aaaaaaaaaaaaaaaa{}^?¿*!-<a href="#">link here</a>aaaaaaaaaa<br />aaaa'; 

Мне нужно распечатать это:

(вырезать каждые 8 ​​символов, игнорируя теги html)

 "<span>aaaaaaaa</span> <span>aaaaaaaa</span> <span>{}^?¿*!-</span> <a href="#">link here</a> <span>aaaaaaaa</span> aa <br /> aaaa" 

что-то вроде того, что делает facebook (<span class="word_break"></span>)

Код facebook:

<span>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</span><wbr></wbr><span class="word_break"></span>

Есть идеи? 🙂

большое спасибо

    Хорошо, я был немного в стороне. Вам нужно str_split (); это должно дать вам работоспособный массив.

     $str = 'aaaaaaaaaaaaaaaa{}^?¿*!-<a href="#">link here</a>aaaaaaaaaa<br />aaaa'; print_r(str_split($str, 8)); **This will return** ( [0] => aaaaaaaa [1] => aaaaaaaa [2] => {}^*!-<a [3] => href="# [4] => ">link h [5] => ere</a>a [6] => aaaaaaaa [7] => a<br />a [8] => aaa ) 

    Посмотрите на документы здесь

    Просто проведите цикл, добавив промежуток в каждый цикл.

    РЕДАКТИРОВАТЬ

    Я просто понял, что это не решит проблему «игнорирования тегов HTML». Вероятно, вы могли бы настроить его очень быстро. Просто не спускайтесь с DARK ROAD для разбора HTML с помощью REGEX. Aloha.

    Я ошибаюсь PHP functio для него word_wrap

     <?php $string = 'abcdefghijklmnop{}^??*!-<a href="#">link here</a>abcdefghij<br />abcd'; print_r(word_wrap($string)); // Function Starts Here function word_wrap($string, $chunk_size = 8) { $offset = 0; $result = array(); while(preg_match('#<(\w+)[^>]*>.*?</\1>|<\w+[^>]*/>#', $string, $match, PREG_OFFSET_CAPTURE, $offset)) { if($match[0][1] > $offset) { $non_html = substr($string, $offset, $match[0][1] - $offset); $chunks = str_split($non_html, $chunk_size ); foreach($chunks as $s) { // Wrap text with length 8 in <span>, otherwise leave as it is $result[] = (strlen($s) == $chunk_size ? "<span>" . $s . "</span>" : $s); } } // Leave HTML tags untouched $result[] = $match[0][0]; $offset = $match[0][1] + strlen($match[0][0]); } // Process last unmatched string if(strlen($string) > $offset) { $non_html = substr($string, $offset); $chunks = str_split($non_html, $chunk_size ); foreach($chunks as $s) { $result[] = strlen($s) == $chunk_size ? "<span>" . $s . "</span>" : $s; } } return $result; } 

    который производит выход

     Array ( [0] => <span>abcdefgh</span> [1] => <span>ijklmnop</span> [2] => <span>{}^??*!-</span> [3] => <a href="#">link here</a> [4] => <span>abcdefgh</span> [5] => ij [6] => <br /> [7] => abcd )