/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

extraño comportamiento de trim()

 
      Índice del Foro elrincondelc.com -> PHP
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 1344

MensajePublicado: 21/08/2013 12:29 pm
Título: extraño comportamiento de trim()

Buenas,

Estoy practicando con PHP y ando medio mosqueado con la función trim(). Por mucho que he intentado depurar el fallo no encuentro la razón por la que trim no me elimina un espacio a la izquierda de un string.

La cuestión es que estoy intentando extraer los datos que me interesan de una página web de recetas de cocinas obteniendo el título de la receta en una variable y los ingredientes en un array. El problema es que para un elemento del array que contiene el string " medio litro de agua", trim() no parece borrar el espacio izquierdo:

Código:
<?php
   namespace leer_receta;

   function hogarutil( $url )
   {
      // obtener titulo
      $string    = file_get_contents($url) or die("No se ha podido abrir");
      $title     = strstr( $string, "<h1");
      $title     = strstr( $title, ">" );
      $end_title = strpos( $title,  "<" );
      $title = substr( $title, 1, $end_title - 1 );
      echo "titulo: " . $title . "<br/><br/>";

      // obtener texto de los ingredientes
      $begin_ingr = strpos( $string, "Ingredientes" );
      $end_ingr   = strpos( $string, "Prepara" );
      $ingr       = substr( $string, $begin_ingr, $end_ingr - $begin_ingr );
      $begin_ingr = strpos( $ingr, "s" ) + 1;
      $ingr       = ltrim( substr( $ingr, $begin_ingr ), " :" );
      echo "texto de los ingredientes:<br/><textarea name=\"code\">" . $ingr . "</textarea><br/>";

      // preparar para fragmentar ingredientes
      $search  = array( "</p>", "</li>", "<br/>");
      $replace = array( "__endline__", "__endline__", "__endline__" );
      $ingr = str_replace( $search, $replace, $ingr  );
      $ingr = strip_tags( $ingr );
      $ingr       = trim( $ingr );
      echo "texto de los ingredientes a punto de fragmentar:<br/><textarea name=\"code\">" . $ingr . "</textarea><br/>";

      // fragmentar ingredientes
      $array_ingr = explode( "__endline__", $ingr );
      foreach( $array_ingr as $ingr )
      {
         if( $ingr !== "" )
         {
            echo "_".$ingr."_<br/>";
            echo "_".$ingr[0]."_<br/>";
            if( ctype_space( $ingr[0] ) )
               echo " Es un espacio<br/>";
            else
               echo " No es un espacio<br/>";
// ===========> aquí NO funciona
            echo "_".trim( $ingr )."_<br/>";
         }
      }

      echo "<br/>";
// ====> aquí funciona
      echo trim( "   a ver si funciona   "). "<br/>";
   }

   //hogarutil("http://www.hogarutil.com/comunidad/recetas/postres/201308/bombones-mascarpone-chocolate-blanco-frutos-4903.html");
   //hogarutil("http://www.hogarutil.com/comunidad/recetas/postres/201303/bombones-chocolate-rellenos-75.html");
   hogarutil("http://www.hogarutil.com/comunidad/recetas/postres/201307/flan-chocolate-blanco-lagrimas-caramelo-4779.html")
?>


Para seguir el código debe verse el código html de el enlace que disecciono para sacar los datos

Un saludo y gracias!
Volver arriba
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 1344

MensajePublicado: 21/08/2013 12:46 pm
Título:

Bien, he descubierto la función ord() que te devuelve el código ascii de una caracter y gracias a eso he descubierto que el espacio ese se corresponde con el código 160. Por tanto esta fuera del código ASCII y normal que trim() no lo borre.

Ahora me pregunto como podría eliminar esos caracteres que están fuera del ascii. ¿De que funciones dispone PHP? Seguiré mirando.

Un saludo!
Volver arriba
dehm



Registrado: 29 Abr 2011
Mensajes: 143

MensajePublicado: 19/11/2013 1:10 pm
Título:

Hola:
¿Solucionaste eso?
He estado metiendo mis manazas en PHP y era para comentarte alguna cosa.
_________________
Aprendiendo
Volver arriba
      Índice del Foro elrincondelc.com -> PHP
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com