Foros del Web » Programando para Internet » PHP »

DIVIDIR TEXTO PARTES IGUALES | Evitar cortar palabras y entre etiquetas HTML

Estas en el tema de DIVIDIR TEXTO PARTES IGUALES | Evitar cortar palabras y entre etiquetas HTML en el foro de PHP en Foros del Web. Hola [email protected]! Recurro a vosotros, ya que me he quedado estancado. Os explico, tengo ésta función, que lo que hace es conectarse al API Google ...
  #1 (permalink)  
Antiguo 02/11/2011, 03:29
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 15 años, 11 meses
Puntos: 1
DIVIDIR TEXTO PARTES IGUALES | Evitar cortar palabras y entre etiquetas HTML

Hola [email protected]!
Recurro a vosotros, ya que me he quedado estancado.

Os explico, tengo ésta función, que lo que hace es conectarse al API Google Translate V2 y traducir textos. Hay un problema, si el texto a traducir es muy largo, hay que dividirlo, ya que por URL se puede pasar un máximo de 450 caracteres. Por tanto, lo que hago es dividir el texto en juegos de 450 caracteres y al final, lo vuelvo a juntar para su salida:

Código PHP:
function Translate($Texto$Idioma1$Idioma2$html boolean){
        
$Text $Texto;
        
$Key "Mi-API-Key";
        
$apiUrl "https://www.googleapis.com/language/translate/v2";
        
$From $Idioma1;
        
$To $Idioma2;
        if(
$html == true){
            
$Format 'html';
        }else{
            
$Format 'text';
        }
        if(
strlen($Text)>450){ //Detecto si el texto es superior a 450 caracteres
            
$TXT_Parts str_split($Text450); //Lo divido en partes iguales de 450
            
$get1 = array();
            
$get2 = array();
            
$url = array();
            
$TXT_Part = array();
            for(
$i=0$i<count($TXT_Parts); $i++){
                
$url[$i] = $apiUrl."?format=".$Format."&key=".$Key."&q=".urlencode($TXT_Parts[$i])."&source=".$From."&target=".$To;
                
$get1[$i] = file_get_contents($url[$i]);
                
$get2[$i] = json_decode($get1[$i]);
                foreach (
$get2[$i]->data->translations as $text) {
                     
$TXT_Part[$i] = $text->translatedText;
                }
            }
            return 
implode('',$TXT_Part); //Junto todas las partes resultantes
        
}else{
            
$url $apiUrl."?format=".$Format."&key=".$Key."&q=".urlencode($Text)."&source=".$From."&target=".$To;
            
$get1 file_get_contents($url);
            
$get2 json_decode($get1);
            foreach (
$get2->data->translations as $text) {
                  return 
$text->translatedText;
            }
        }
    } 
Todo funciona perfectamente, el problema es que ahora necesito:
  • Evitar partir palabras cuando parto el texto (1-> Hola como est | 2-> án ustedes).
  • Evitar partir palabras entre etiquetas HTML (<a></a>, <b></b>, etc)

Alguien tiene alguna idea?
Gracias a todos!!!
__________________
http://www.idilicstudio.com
  #2 (permalink)  
Antiguo 02/11/2011, 05:23
 
Fecha de Ingreso: octubre-2010
Ubicación: Madrid
Mensajes: 295
Antigüedad: 9 años, 1 mes
Puntos: 12
Respuesta: DIVIDIR TEXTO PARTES IGUALES | Evitar cortar palabras y entre etiquetas HT

puedes intentar insertar una función similar a esta:
Código PHP:
<?php
function cortar_string($string$largo) {
    
$marca "<!--corte-->";
    if (
strlen($string) > $largo) {
        
$string wordwrap($string$largo$marca);
        
$string explode($marca$string);
        
$string $string[0];
        return 
$string '...'//esto no te sirve es para poner puntos suspensivos detrás
    
}
    return 
$string;
}
 
$string "Ejemplo de como cortar un string sin considerar una palabra incompleta.";
echo 
cortar_string($string40);
  #3 (permalink)  
Antiguo 02/11/2011, 07:15
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: DIVIDIR TEXTO PARTES IGUALES | Evitar cortar palabras y entre etiquetas HT

Cita:
Iniciado por educacanis Ver Mensaje
puedes intentar insertar una función similar a esta:
Código PHP:
<?php
function cortar_string($string$largo) {
    
$marca "<!--corte-->";
    if (
strlen($string) > $largo) {
        
$string wordwrap($string$largo$marca);
        
$string explode($marca$string);
        
$string $string[0];
        return 
$string '...'//esto no te sirve es para poner puntos suspensivos detrás
    
}
    return 
$string;
}
 
$string "Ejemplo de como cortar un string sin considerar una palabra incompleta.";
echo 
cortar_string($string40);
Gracias educacanis, miraré si lo puedo implementar..pero claro, yo no recorto un texto, lo divido en paquetes de 450 caracateres. Mmm...pero bueno, a ver si tu ejemplo nos da ideas...
__________________
http://www.idilicstudio.com

Última edición por tonimito; 02/11/2011 a las 10:23

Etiquetas: cortar, dividir, etiquetas, html, iguales, palabras, partes
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




La zona horaria es GMT -6. Ahora son las 00:01.