Мне нужно обернуть длинные слова, каждый в тегах 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 )