2014-09-08 5 views
-1

을 사용하여 멀티 바이트 문자열을 약 n 개의 단어로 잘림 후 this 질문을 한 후 사용자 정의 PHP 함수를 준비해야만 직접 문자열/코드를 찾을 수없는 간단한 문자열을 얻을 수있었습니다 편물.PHP mb 함수

요구했다 : multibyte language

  1. 인식을 문자 ş, ı처럼 ğUTF-8
  2. 허용 길이를 결정할 수 에 인코딩을 복용 후
  3. (문자 수를 사용하여) 긴 문자열의 부분, 의 끝에있는 단어는 의미가 있어야하며 '...'부분을 부분의 끝에 연결하십시오.
  4. 키 스트로크 (자),하지 그러나 나는 전문가가 아니다 코드가 작동하는지 알고 shuld

독자 바이트 고려해야합니다. 훨씬 더 효율적이거나 깊이 생각할 수있는 코딩으로 동일한 목적을 달성하는 것이 가능하다고 나는 믿는다. 코드에서 보듯이 코드에는 보안 문제가 없으며 허용되는 길이보다 긴 경우에만 입력 문자열을 조작합니다.

관해서

답변

0
// PrintBrief : Only introduction words (brief) are printed, multibyte safe 
//    IMPORTANT: assumed that no tag has been used in input string 
//    output's last word be a meaningful word, no need to worry about erroneous multibyte slicing 
// $str   : string input string to be written briefly 
// $max_chars : number if string is longer than $max_chars, only first $max_chars will be the source string 
// $encoding : string multibyte encoding 
function PrintBrief ($str , $max_chars = ALLOWED_NUM_OF_CHARS, $encoding = "UTF-8") 
{ 
    mb_regex_encoding($encoding); 
    mb_internal_encoding($encoding); 
    if (mb_strlen($str , $encoding) > $max_chars) 
    { 
     $str = mb_substr($str , 0 , $max_chars , $encoding); 
     $w = array(); 
     $w = mb_split(' ',$str); 
     $k = array_pop($w); 
     $k = trim(implode(' ', $w)); 
     $punc = array(';' , ','); 
     for ($i = 1 ; $i <= count($punc) ; $i++) 
     { $k = rtrim($k , $punc[$i]); } 
     return $k.' ...'; 

    } 
    else 
    { 
     return $str; 

    } 
} 

사용 예 :

$str = 'şğıöç İĞŞ ĞŞĞŞ Öİ ÇÇ Orta Amerika\'nın en büyük ülkesi Nikaragua\'nın başkenti Managua dün sabaha karşı büyük bir patlamayla sarsıldı. Olayın, şehre düşen ufak bir meteroit sonucu açılan krater çukurundan kaynaklandığı anlaşıldı. 1 milyon 200 bin kişinin yaşadığı ve bünyesinde ulsulararası bir havalimanının da olduğu şehre meteorit düşmesi sonucu, sürpriz bir şekilde can veya mal kaybı yaşanmadı ancak 12 metre çapında bir krater çukuru açıldı ve patlama neredeyse şehrin tamamında hissedildi.'; 

ALLOWED_NUM_OF_CHARS = 300

echo PrintBrief ($str); 

출력 설정에 호출 이후 :

S

»««««««««««««»««««««««»««»«»«»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»Nikaragua'nın başkenti»마누아 누나와 함께하는 마라 구 아구아나 파 마라. Olayın, şehre düşen ufak bir meteroit sonucu açılan krater çukurundan kaynaklandığı anlaşıldı. 1 milyon 200 빈 상자에 담아서 ... 자세히