Foros del Web » Programando para Internet » PHP »

Lista de palabras clave se corta en caractares especiales

Estas en el tema de Lista de palabras clave se corta en caractares especiales en el foro de PHP en Foros del Web. Saludos a todos!! He hecho un pequeño script en php para generar las palabras clave de un texto. Mis conocimientos php son bastantes limitados y ...
  #1 (permalink)  
Antiguo 01/08/2009, 17:01
 
Fecha de Ingreso: marzo-2007
Mensajes: 8
Antigüedad: 17 años, 8 meses
Puntos: 0
Lista de palabras clave se corta en caractares especiales

Saludos a todos!!

He hecho un pequeño script en php para generar las palabras clave de un texto. Mis conocimientos php son bastantes limitados y lo he hecho tomando código de aqui y de alli. Funciona más o menos bien hasta que se topa con caracteres especiales tipo acentos y ñ.

Por ejemplo, castaña aparece en la lista como casta.

Alguien me puede ayudar?? Estas son las dos funciones que uso:

Ooops no puedo poner el código....ni adjuntar archivos.....ni poner un enlace al archivo....
  #2 (permalink)  
Antiguo 02/08/2009, 08:37
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Lista de palabras clave se corta en caractares especiales

pon el código cambiando todos los http:// por htpp:// para que puedas postearlo :D
  #3 (permalink)  
Antiguo 02/08/2009, 14:40
 
Fecha de Ingreso: marzo-2007
Mensajes: 8
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Lista de palabras clave se corta en caractares especiales

Ahora si puedo postear el código:

La función clean() la uso exactamente igual para la obtención de la metadescripción y retorna correctamente el texto con los caracteres especiales por lo que deduzco que el problema está en la función keys().

Código:
function keys($text,$listexclude,$listgoldwords,$mindensity,$minlength,$maxwords) {
     $text=clean($text);
     $text = strtolower($text);

    $words_count=str_word_count($text);
    
    $array_words=array($text);

    $v=strlen($text); 

    $frequency = array_count_values( str_word_count( $text, 1) );
    arsort ($frequency);
    $words = array();
    $countwords=0;
    foreach( $frequency as $F => $value ) {

    $density = round( ($value * 100) / ($words_count) );

    $frequent_word=trim($F);
   $excludewords = @explode ( ",",$listexclude);
   if ($frequent_word!=in_array($frequent_word,$excludewords) && !in_array($frequent_word,$words)) {
   
      $includewords = @explode(",",$listgoldwords);
    //  Excluir palabras poco frecuentes, inferiores a un minimo e incluir las que esten en la lista gold
    if($value >=$mindensity || in_array($frequent_word,$includewords)){

    // Obtener la longitud de la cadena de frecuencia
    $long=strlen($F);

    //  Excluir palabras con longitud de frecuencia inferior al minimo e incluir las que esten en la lista gold
    if($long>= $minlength || in_array($frequent_word,$includewords)){
     $words[]=$frequent_word;
     $countwords++;
     if ($countwords>$maxwords)break;
     }
    }
   }
 }
 $keywordslist = implode(',',$words);
 return $keywordslist;
}

function clean($text) {
    		$text = preg_replace( "'<script[^>]*>.*?</script>'si", '', $text );
		$text = preg_replace( '/<a\s+.*?href="([^"]+)"[^>]*>([^<]+)<\/a>/is', '\2 (\1)', $text );
		$text = preg_replace( '/<!--.+?-->/', '', $text );
		$text = preg_replace( '/{.+?}/', '', $text );
		$text = preg_replace( '/&nbsp;/', ' ', $text );
		$text = preg_replace( '/&amp;/', ' ', $text );
		$text = preg_replace( '/&quot;/', ' ', $text );
		$text = strip_tags( $text );
		$text = htmlspecialchars( $text );
             $text = str_replace(array("\r\n", "\r", "\n", "\t"), " ", $text);
        		while (strchr($text,"  ")) {
			$text = str_replace("  ", " ",$text);
		}
	for ($cnt = 1; $cnt < strlen($text)-1; $cnt++) {
			// add a space after any full stops or comma's for readability
			// added as strip_tags was often leaving no spaces
			if (($text{$cnt} == '.') || ($text{$cnt} == ',')) {
				if ($text{$cnt+1} != ' ') {
					$text = substr_replace($text, ' ', $cnt + 1, 0);
				}
			}
		}
	return $text;
 }
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:45.