2009-09-03 6 views
4

현재 HTML 특성을 포함 할 수있는 아주 긴 문자열을 분할하려고합니다. 예를 한 번PHP로 긴 문자열을 분할하는 방법은 무엇입니까?

이다 : 나는 과거에이 기능을 사용하고이를 위해

Thiiiissssaaaveryyyylonnngggstringgg 

:

function split($sString, $iCount = 75) 
{  
    $text = $sString; 
    $new_text = ''; 
    $text_1 = explode('>',$text); 
    $sizeof = sizeof($text_1); 
    for ($i=0; $i<$sizeof; ++$i) { 
     $text_2 = explode('<',$text_1[$i]); 
     if (!empty($text_2[0])) { 

       $new_text .= preg_replace('#([^\n\r .]{'. $iCount .'})#iu', '\\1 ', $text_2[0]); 
     } 
     if (!empty($text_2[1])) { 
      $new_text .= '<' . $text_2[1] . '>'; 
     } 
    } 
    return $new_text; } 

기능은 문자를 선택하고 X 문자 후에 분할하기 위해 노력하고 있습니다. 문제는 HTML 또는 ASCII 문자가 같이 거기에 혼합 할 때입니다 :

Thissssiisss<a href="#">lonnnggg</a>sting&#228;&#228;&#228; 

내가 이상이 문자열을 분할하고 HTML 태그 내에서 문자를 계산하지하고 각 ASCII 문자를 계산하는 방법을 알아 내기 위해 노력 해왔다 1.

도움이 될 것입니다.

는 당신에게 감사

답변

2

를 추출하기 위해 DOM parser을 사용하여이 :

function utf8_wordwrap($str, $width = 75, $break = "\n") // wordwrap() with utf-8 support { 
    $str = preg_split('#[\s\n\r]+#', $str); 
    $len = 0; 
    foreach ($str as $val) { 
     $val .= ' '; 
     $tmp = mb_strlen($val, 'utf-8'); 
     $len += $tmp; 
     if ($len >= $width) { 
      $return .= $break . $val; 
      $len = $tmp; 
     } 
     else { 
      $return .= $val; 
     } 
    } 
    return $return; 
} 

출처 : PHP Manual Comment

코드 포인트 관련 문제 - html_entity_decode을 보길 원할 것입니다. 코드 포인트 (예 : &#223)를 나타냅니다. 무엇이 223인지 알 수 있도록 charset을 주어야합니다 ('223'은 charset에 따라 달라짐).

+0

"html_entity_decode"팁에 감사드립니다. 나는 그 기능을 사용하여 내가 작업하고있는 것에 포함 시켰고 완벽하게 작동하는 것처럼 보인다. 다시 한 번 감사드립니다! –

+0

@Patrik Johansson - 다행 당신을 위해 :) –

2

사용을 고려 내장 대신 wordwrap()?

+0

wordwrap의 문제점은 utf8 와이드 문자 (문자열이 유효하지 않은 utf8로 렌더링 됨) 또는 &nsbp;과 같은 html 요소의 중간에있는 줄을 깨뜨릴 수 있다는 것입니다. –

+0

@omry, 내 대답을 참조하십시오. –

0

this 함수를 사용하여 FireStats에서 문자열을 분할합니다.

당신은 아마도 문맥에서 벗어나 쉽게 사용할 수 있습니다. 다른 함수를 호출하고 있음을 주목하십시오. 원하는 경우 utf8 검사를 건너 뛸 수 있습니다. 당신이 wordwrap에 대한 UTF-8 지원에 대한 걱정이 있다면

0

그 복잡성을 제거하십시오, 당신이 원하는, 일반 텍스트를

//Dump contents (without tags) from HTML 
$pageText = file_get_html('http://www.google.com/')->plaintext; 
echo "Length is: " . strlen($pageText); 
관련 문제