Task is to split string by 500 characters into array. I've done this with str_split, but I've got a problem. Ofcourse it must be spitted by words, or else this text is not readable. And more then that. This text comes with links, and links will be broken if I split them (infact any html) =) So I need to start splitting only if tag ended or even not started yet... same goes to the words. ±100 chars is not a problem.
I would really appreciate a piece of code to do that. I'm not very good with regexps.
EDIT: Example
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac diam non nisl interdum tempus. Nam id ipsum id nunc tempus varius. Suspendisse ut neque a velit elementum placerat. Curabitur lobortis, lorem sit <a href="#">amet tincidunt ultricies,</a> eros ante feugiat dui, sit amet lacinia metus risus a magna. Duis velit dui, sollicitudin at aliquet et, elementum at dui. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;
Script:
<?php
$str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. <a href=\"http://example.com\">Phasellus condimentum
facilisis ipsum</a>, quis elementum urna ornare non. Cras nisi libero, dapibus sed euismod id, pharetra eu libero.
Maecenas mi nulla, ultrices in congue in, viverra ac massa. Quisque <br/>at turpis nulla. Suspendisse semper urna eu
augue aliquet dictum. Mauris at purus in lectus varius bibendum. <em>Fusce hendrerit <strong>posuere ante</strong></em>,
at pellentesque odio lobortis at. Integer quis urna eget ipsum dictum volutpat quis et leo. Etiam hendrerit eleifend
ornare. Phasellus eget justo elit.";
$str = str_split($str, 200);
var_dump($str);
Output:
array(4) {
[0]=>
string(200) "Lorem ipsum dolor sit amet, consectetur adipiscing elit. <a href="http://example.com">Phasellus condimentum
facilisis ipsum</a>, quis elementum urna ornare non. Cras nisi libero, dapibus sed euismod "
[1]=>
string(200) "id, pharetra eu libero.
Maecenas mi nulla, ultrices in congue in, viverra ac massa. Quisque <br/>at turpis nulla. Suspendisse semper urna eu
augue aliquet dictum. Mauris at purus in lectus varius bi"
[2]=>
string(200) "bendum. <em>Fusce hendrerit <strong>posuere ante</strong></em>,
at pellentesque odio lobortis at. Integer quis urna eget ipsum dictum volutpat quis et leo. Etiam hendrerit eleifend
ornare. Phasellus"
[3]=>
string(17) " eget justo elit."
}
It's a harsh character split, half of word comes to $str[1]. And if it was a link right by that place, it would be corrupted.
It would probably be best not to do this with regexes but with PHP's native XML/HTML parsing capabilities. Something like the following code may well do what you want:
<?php
$str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. <a href=\"http://example.com\">Phasellus condimentum facilisis ipsum</a>, quis elementum urna ornare non. Cras nisi libero, dapibus sed euismod id, pharetra eu libero. Maecenas mi nulla, ultrices in congue in, viverra ac massa. Quisque <br/>at turpis nulla. Suspendisse semper urna eu augue aliquet dictum. Mauris at purus in lectus varius bibendum. <em>Fusce hendrerit <strong>posuere ante</strong></em>, at pellentesque odio lobortis at. Integer quis urna eget ipsum dictum volutpat quis et leo. Etiam hendrerit eleifend ornare. Phasellus eget justo elit.";
$dom = new DOMDocument;
$root = $dom->createDocumentFragment();
$root->appendXML($str);
$bits = array();
foreach ($root->childNodes as $node) {
if ($node->nodeType == XML_TEXT_NODE) {
$bits = array_merge($bits, explode(' ', $node->nodeValue));
} elseif ($node->nodeType == XML_ELEMENT_NODE) {
$dom->appendChild($newnode = $node->cloneNode(true));
$bits[] = $dom->saveHTML();
$dom->removeChild($newnode);
}
}
var_dump($bits);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.