2012-05-04 14 views
5

Usando php: ¿Cómo puedo insertar un salto de línea en el espacio en blanco que se encuentra en el medio relativo de la cadena? O en otras palabras, ¿cómo cuento las palabras en una oración y luego pongo un salto de línea en la oración en el punto medio?Cómo agrego un salto de línea en el punto medio de una cadena dividida por espacios en blanco

La idea es evitar las viudas (palabras abandonadas) en la segunda línea de títulos de artículos de blog esencialmente cortando cada título a la mitad y poniéndolo en dos líneas si el título ocupa más de una línea.

Gracias de antemano.

Actualización: Hola a todos, me di cuenta de que necesitaba la función preg_split para dividir el título por espacios en blanco. Lo siento si esa parte no estaba clara en la pregunta. He modificado la respuesta de Asaf y utilizado este:

$title_length = strlen($title); 
if($title_length > 30){ 
    $split = preg_split('/ /', $title, null, PREG_SPLIT_NO_EMPTY); 
    $split_at = ceil(count($split)/2); 
    echo $split_at; 
    $broken_title = ''; 
    $broken = false; 
    foreach($split as $word_pos => $word){ 
     if($word_pos == $split_at && $broken == false){ 
      $broken_title.= '<br />'."\n"; 
      $broken = true; 
     } 
     $broken_title .= $word." "; 
    } 
    $title = $broken_title; 
} 

Soy nuevo SO y estoy impresionado por el poder de la comunidad. Aclamaciones.

+0

Si desea añadir un salto de línea en una oración en el medio? –

+0

Hola David, sí. Cualquier ayuda para aclarar es bienvenida. De hecho, necesito verificar la longitud del título de un artículo de blog primero. Entonces, si es demasiado grande para caber en una línea, necesito poner un salto de línea en el medio. –

Respuesta

5

Utilice la función wordwrap() de PHP. Puede usar la longitud de su cuerda dividida por 2 como el segundo argumento. Aquí está un ejemplo:

<?php 
$sentence = 'This is a long sentence that I would like to break up into smaller pieces.'; 
$width = strlen($sentence)/2; 
$wrapped = wordwrap($sentence, $width); 
echo $wrapped; 
?> 

Genera:

This is a long sentence that I would 
like to break up into smaller pieces. 

Si desea salida HTML, puede utilizar la tercera argumento opcional para especificar los caracteres de salto. De esta manera:

$wrapped = wordwrap($sentence, $width, '<br />'); 
+1

Eso suena como lo que necesito. Apagado para probarlo Muchas gracias. –

+0

@Asaph Esto es malo porque puede cortar la oración en el medio de una palabra. –

+1

@ DavidBélanger No. No se rompe en el medio de las palabras. Ese es el punto de la función ['wordwrap()'] (http://php.net/manual/en/function.wordwrap.php). – Asaph

0

ACTUALIZADO

<?php 
$Sentence = 'I will go to the school tomorrow if it is not raining outside and if David is ok with it.'; 
$Split = explode(' ', $Sentence); 

$SplitAt = 0; 
foreach($Split as $Word){ 
    $SplitAt+= strlen($Word)-1; 
    if($SplitAt >= strlen($Sentence)){ 
     break; 
    } 
} 

$NewSentence = wordwrap($Sentence, $SplitAt, '<br />' . PHP_EOL); 


echo $NewSentence; 
?> 

Producir esto:

voy a ir a la escuela mañana si no es < br/> \ n
lloviendo y si David está de acuerdo con eso.

EDITAR: Agregado PHP_EOL para que coincida con todos los sistemas de html con más < br/>

+0

Wow David, gracias. No estoy muy familiarizado con las expresiones regulares, pero esto parece realmente útil. ¿Alguna razón por la que debería usar este enfoque en lugar de usar la función 'word_wrap()'? –

+0

@BrandonBrown Lo siento, edité mi publicación. Es mejor ir con word_wrap. Vi que era para un título en alguna parte, un título tendrá bastante palabra con espacio. –

+0

@BrandonBrown En realidad es ['wordwrap()'] (http://php.net/manual/en/function.wordwrap.php), no 'word_wrap()'. Actualicé mi respuesta. Perdón por el error tipográfico inicialmente. – Asaph

Cuestiones relacionadas