част от текста излиза на странни ромбчета

embaka

Registered
здравейте, част от текста излиза на странни ромбчета, когато е на кирилица, ако е на латиница всико си е както трябва


Код:
<?
//header ('Content-type: text/html; charset=utf-8');

function extractCommonWords($string)
{
      $stopWords = array('i','a','about','an','and','are','as','at','be','by','com','de','en','for','from','how','in','is','it','la','of','on','or','that','the','this','to','was','what','when','where','who','will','with','und','the','www');
   
      $string = preg_replace('/ss+/i', '', $string);
      $string = trim($string); 
      $string = preg_replace('/[^а-яa-zА-ЯA-Z0-9 -]/', '', $string); // only take alphanumerical characters, but keep the spaces and dashes too…
      $string = strtolower($string); // make it lowercase
   
      preg_match_all('/\b.*?\b/i', $string, $matchWords);
      $matchWords = $matchWords[0];
      
      foreach ( $matchWords as $key=>$value ) 
	  		{
          		if ( $value == '' || in_array(strtolower($value), $stopWords) || strlen($value) <= 3 ) 
				{
             		unset($matchWords[$key]);
          		}
      		}   
      $wordCountArr = array();
      if ( is_array($matchWords) ) 
	  	{
          foreach ( $matchWords as $key => $val ) 
		  {
              $val = strtolower($val);
              if ( isset($wordCountArr[$val]) ) 
			  	{
                  $wordCountArr[$val]++;
              	} 
			  else 
			 	 {
                  	$wordCountArr[$val] = 1;
             	 }
          }
      	}
      arsort($wordCountArr);
      $wordCountArr = array_slice($wordCountArr, 0, 10);
      return $wordCountArr;
}

$text = "Пингвинът е един от 17-те нелетящи птици, които живеят само в северното полукълбо.Повечето от 17-те вида не живеят в Антарктика, а между 45° и 60° , кадето отглеждат поколението си.Някои пингвини населват умерените региони, а други живеят на Екватора.

Основни черти

Ниският, късокрак вид на пингвините е спечелил симпатията на хора от цял свят.Техният размер е около 35см височина и приблизително тежат 1кг (за малкият син пингвин), до 115см и 25-40кг (при кралският пингвин).Повечето са черни на гърба и бели на корема.Пингвините са ограничени от към цветове, рядко се срещат червени или жълти ириси на очите на някои видове;червени клюнове и крака също се срещат рядко;жълти кичури на веждите се срещат при три вида от Eudyptes; и оранжево на главата, вратът, гърдите се срещат само при кралският и императорският пингвин.";
$words = extractCommonWords($text);
echo implode(',', array_keys($words));
?>
 
проблема е в това, че не работи правилно функцията с текст на кирилица, трябва да взема 10 думи от този текст, а взема целия текст

всичко се осира от тея редове

Код:
$string = preg_replace('/ss+/i', '', $string);
				$string = trim($string); 
				$string = preg_replace('/[^а-яА-Яa-zA-Z0-9 -]/', '', $string); // only take alphanumerical characters, but keep the spaces and dashes too…

по-точно като добавя а-яА-Я, тогава не работи
 
редактирах това онова, но се оказва следното, когато дам print_r($matchWords); ако текста е на латиница ми излизат думите както трябва, но като е на кирилица, на мястото на дума ми излиза по цяло изречение

Код:
function clear_text($str){
		$str=mb_strtolower($str,"UTF-8");
		$array=array(" ","span","p","br","-","–","!","@","#","$","%","^","&","*","(",")","_","+","=","[","]","{","}","\\","/","|",";",":","\"","'",">","<",".",",","?","~","`","---","--");
		$str=str_replace($array," ",$str);
		return $str;
		}
		
		
			/* Auto Generate keywords function */
			  function keywords($string)
			  {
				$stopWords = array('е','от','в','във','с','със','само','не','а','и','където','защото','за да','си','ви','вие','около','за','на','под','над','са','се','или','й','при','като','до','но','били','много','малко','му','по','между','през','http','www','°');
			 
				$string = str_replace('/ss+/i', '', $string);
				$string = trim($string); 
				$string = str_replace('/[^а-яА-Яa-zA-Z0-9 -]/', '', $string); // only take alphanumerical characters, but keep the spaces and dashes too…
				$string = clear_text($string);
				//$string = strtolower($string); 
				//$string = mb_convert_case($string, MB_CASE_LOWER, "UTF-8");
			 
				preg_match_all('/\b.*?\b/i', $string, $matchWords);
				$matchWords = $matchWords[0];
				print_r($matchWords);
				
				foreach ( $matchWords as $key=>$value ) 
					  {
						  if ( $value == '' || in_array(strtolower($value), $stopWords) || strlen($value) <= 3 ) 
						  {
							  unset($matchWords[$key]);
						  }
					  }   
				$wordCountArr = array();
				if ( is_array($matchWords) ) 
				  {
					foreach ( $matchWords as $key => $val ) 
					{
						$val = strtolower($val);
						if ( isset($wordCountArr[$val]) ) 
						  {
							$wordCountArr[$val]++;
						  } 
						else 
						   {
							  $wordCountArr[$val] = 1;
						   }
					}
				  }
				arsort($wordCountArr);
				$wordCountArr = array_slice($wordCountArr, 0, 10);
				return $wordCountArr;
			  }

$text = "A common issue I have come across in the past is that I have a CMS system, or an old copy of Wordpress, and I need to create a set of keywords to be used in the meta keywords field. To solve this I put together a simple function that runs through a string and picks out the most commonly used words in that list as an array. This is currently set to be 10, but you can change that quite easily. The first thing the function defines is a list of stop words. This is a list of words that occur quite a bit in English text and would therefore interfere with the outcome of the function. The function also uses a variant of the slug function to remove any odd characters that might be in the text.";
	$words = keywords($text);
	$new['keywords'] = implode(', ', array_keys($words));
 

Back
Горе