2011-01-09 5 views
3

작업은 문자열을 500 자로 배열로 배열하는 것입니다. str_split을 사용하여이 작업을 수행했지만 문제가 있습니다. 당연히 말로 말해야합니다. 그렇지 않으면이 텍스트를 읽을 수 없습니다. 그리고 그 이상. 이 텍스트는 링크와 함께 제공되며 링크를 끊으면 링크가 끊어집니다 (infact any html) =) 그래서 태그가 끝나거나 아직 시작하지 않은 경우에만 분할을 시작해야합니다 ... 같은 말도 사용됩니다. ± 100 문자는 문제가되지 않습니다.PHP : 단어와 태그로 정확한 문자열을 배열로 배열

나는 코드를 작성해 주셔서 감사합니다. 나는 정규 표현식에별로 좋지 않다.

편집 :

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;

스크립트 :

<?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); 

출력 :

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." 
} 

그것은 가혹한 문자 분할의, 단어의 절반은 $ str을 [에 온다 1]. 그리고 그것이 바로 그 장소의 링크라면, 그것은 손상 될 것입니다.

+0

당신이 폭발 봤어 ("", $ 문자열) : 다음과 같은 코드가 아니라 당신이 원하는 것을 할 수있다? – Aston

+0

나는 약간의 샘플 데이터를 정말로 고맙게 생각할 것이다. –

+0

* 정말로 * HTML 태그를 그대로 유지해야합니까? –

답변

1

regexes를 사용하지 않고 PHP의 기본 XML/HTML 구문 분석 기능을 사용하는 것이 가장 좋습니다.

<?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); 
+0

몇 가지 예를 추가했습니다. 코드를 수정할 수 있습니다. =)이 예제에서는 Thnx를 사용합니다. btw =) – holms

관련 문제