2012-04-13 3 views
3

문자열을 분할 :내가이 PHP 스크립트 발견 PHP

// 스트립 태그 모든 HTML $ 문자열 = strip_tags ($ 문자열)을 깨는 피하기 위해를;

(나 strlen ($ 문자열)> 500) {

// truncate string 
$stringCut = substr($string, 0, 500); 

// make sure it ends in a word so assassinate doesn't become ass... 
$string = substr($stringCut, 0, strrpos($stringCut, ' ')).'... <a href="/this/story">Read More</a>'; } echo $string; 

가 webbiedave하여 만든 경우. 이제 내 질문은 공간 또는 점을 찾기 위해 strrpos에서 지정할 수있는 방법은 무엇입니까?

그래서 문자열을 22로 제한하면 StackOverFlow와 같은 것이 가장 좋은 사이트입니다. - StackOverFlow가 출력됩니다 ... 그리고 http://stackoverflow.com이 가장 좋은 사이트입니다. 출력 만 ... 공간 및 문자열 길이> 22를 찾지 못했기 때문에 출력합니다. 문자열에서 점을 찾으면이 스크립트를 어떻게 바꿀 수 있습니까? http://stackoverflow.com이 지금까지 최고의 사이트입니다 ->http://stackoverflow이 되나요?

답변

1

내가 woul d string from end, cause 불완전한 단어를 삭제해야합니다. 불완전한 단어의 조건은 짧은 문자열이 공백이나 '!'와 같은 끝 문자로 끝나지 않을 때입니다. 또는 그냥 점. 다음은 문자열 끝에 +1 기호가 같은 문자인지 확인하는 것입니다. 그것이 당신 인 경우에 끝에서 다음 공간까지 어떤 특성든지 다만 del해야한다. 이것은 regexp (/ [: alfa] + $ /와 비슷한 것으로, 아마도 잘해야 만 할 것입니다)에 의해 수행 될 수 있습니다.

이것은 기본적인 작업을 수행하는 간단한 방법이지만 생각하기에 좋은 방법입니다.

이 될 수 있는지의

예 :

function word_wrap_custom($string, $limit){ 
$oneWord = explode(' ', $string); 
if(count($oneWord) < 2) 
    return $oneWord[0]; 
$string = substr($string, 0, $limit + 2); 

$endchar = substr($string, $limit, $limit + 1); 

$postendchar = substr($string, $limit + 1, $limit + 2); 

$arrAccetpEndChar = array(' ', '!', '?', ',', '.', ';', ':'); 

if(in_array($postendchar, $arrAccetpEndChar) || in_array($endchar, $arrAccetpEndChar)) 
{ 
    return $string; 
} 
else 
{ 
    return preg_replace('/[A-Za-z0-9]+$/', '', $string); 
} 
} 
+0

당신의 대답은 가장 좋은 것 같습니다 :)하지만 나는 PHP에서 초심자입니다 ... 당신이 말하는 것을 PHP 코드로 번역 할 수 있습니까? – TGeorge

+0

위 코드가 게시되었습니다. 당신이 원하는 것을 정확하게하기 위해서는 그것을 약간 편집해야합니다. 질문이 있으시면, 물어보십시오. –

+0

그것은 작동하지만 귀하의 코드는 버그가 있습니다. 만약 내가 공간을 가지고 있지 않다면 그것은 단지 출력 할 것입니다 ... read more 과 같은 것이 있다면 echo word_wrap_custom ("Stackoverflow", "22");?> 출력됩니다 ... return preg_replace ('/ [A-Za-z0-9] + $ /', '... read more', $ string);를 반환하면 더 많은 것을 읽을 수 있습니다. – TGeorge

2

단어를 분리하지 않고 줄 제한을 준수하면서 분할하려면 다른 분할 방법 대신 wordwrap을 사용하십시오.

$longText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut purus a tellus ultrices vulputate. Aliquam posuere facilisis elit ut adipiscing. Nunc auctor dignissim porta. Vestibulum vitae tempor augue. Nam vel odio quis quam gravida ultrices sed a arcu. Phasellus nec odio massa. Duis imperdiet rutrum mi, vitae volutpat nulla convallis quis. Donec dignissim pulvinar mauris id molestie. Duis id mauris augue, id sagittis velit. Ut justo lectus, scelerisque egestas tempor et, facilisis vitae erat. Quisque ut mattis nulla. Donec a justo quis nisi tempus ultrices. Phasellus non dui non dolor tristique tincidunt vitae imperdiet libero. Pellentesque pretium luctus sem."; 

$makeLine = wordwrap($longText, 50, PHP_EOL); 

echo $makeLine; 

이전과 이후 : http://codepad.org/Dqz8qzAy

당신이 첫 번째 라인을 원한다면, 아마도 요약 텍스트로, 당신은 결과 문자열을 폭발 결과 배열의 오프 첫 번째 결과 이동할 수 :

$longText = "..."; 

$makeLine = wordwrap($longText, 50, '\r\n'); 
$firstSen = array_shift(explode('\r\n', $makeLine)); 

echo $firstSen; // Lorem ipsum dolor sit amet, consectetur adipiscing... 
0

이에 휴식하지 않습니다 단어 :

function ShortenText($text, $chars) 
{ 
    $chars = $chars;$text = $text." "; 
    $countchars = strlen($text); 
    if($countchars > $chars) 
    { 
     $text = substr($text,0,$chars); 
     $text = substr($text,0,strrpos($text,' ')); 
     $text = $text."..."; 
    } 
    return $text; 
} 
+0

귀하의 코드는 내가 이 있다면 StackOverFlow가 출력됩니다 ... 그리고 내가 가지고 있다면 왜냐하면 그는 처음 22 자 안에 공백이 없기 때문입니다. 그래서 점이나 공간을 찾고 싶습니다. – TGeorge