salto nbsp linea espacio php html css textwrapping

php - nbsp - ¿Cómo envolver las líneas largas sin espacios en HTML?



espacio html &nbsp (14)

Si un usuario escribe en una línea larga sin espacios o espacios en blanco, romperá el formateo yendo más ancho que el elemento actual. Algo como:

HAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHA ................................................. .................................................. ..........................................

Intenté simplemente usar wordwrap() en PHP, pero el problema es que si hay un enlace u otro HTML válido, se rompe.

Parece que hay algunas opciones en CSS, pero ninguna de ellas funciona en todos los navegadores. Ver el ajuste de palabras en IE.

¿Cómo resuelves este problema?


Agregue el espacio de ancho cero ( ​ ) a la cadena y se ajustará.

Aquí hay un ejemplo de Javacript:

let longWordWithOutSpace = ''pneumonoultramicroscopicsilicovolcanoconiosis''; // add ​ between every character to make it wrap longWordWithOutSpace.split('''').join(''​'');


Basado en la sugerencia de Jon, el código que creé:

public static string WrapWords(string text, int maxLength) { string[] words = text.Split('' ''); for (int i = 0; i < words.Length; i++) { if (words[i].Length > maxLength) //long word { words[i] = words[i].Insert(maxLength, " "); //still long ? words[i]=WrapWords(words[i], maxLength); } } text = string.Join(" ", words); return (text); }


Estaba tratando de resolver el mismo problema y encontré la solución aquí:

http://perishablepress.com/press/2010/06/01/wrapping-content/

Solución: agregando al contenedor las siguientes propiedades de CSS

div { white-space: pre; /* CSS 2.0 */ white-space: pre-wrap; /* CSS 2.1 */ white-space: pre-line; /* CSS 3.0 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ white-space: -moz-pre-wrap; /* Mozilla */ white-space: -hp-pre-wrap; /* HP Printers */ word-wrap: break-word; /* IE 5+ */ }

La idea es usarlos todos para que tenga una mejor compatibilidad entre navegadores

Espero que esto ayude


Esto es lo que hago en ASP.NET:

  1. Dividir el campo de texto en espacios para obtener todas las palabras
  2. Iterar las palabras buscando palabras que son más largas que cierta cantidad
  3. Inserte cada x caracteres (por ejemplo, cada 25 caracteres)

Miré otras formas basadas en CSS de hacer esto, pero no encontré nada que funcionara entre navegadores.


Evito el problema al no tener mi barra lateral derecha fija así: P



Me gusta utilizar el overflow: auto propiedad overflow: auto CSS / emparejamiento de valores. Esto representará el objeto principal de la manera en que esperaría que apareciera. Si el texto dentro del elemento primario es demasiado ancho, las barras de desplazamiento aparecen dentro del objeto mismo. Esto mantendrá la estructura de la forma que usted desea que se vea y le brindará al espectador la capacidad de desplazarse para ver más.

Editar: lo bueno del overflow: auto comparación con el overflow: scroll es que con el modo auto , las barras de desplazamiento solo aparecerán cuando exista un contenido desbordado. Con scroll , las barras de desplazamiento están siempre visibles.


Me gustaría poner la publicación en un div que tendría un desbordamiento de configuración de ancho fijo para desplazarse (o para ocultar por completo dependiendo del contenido).

asi como:

#post{ width: 500px; overflow: scroll; }

Pero solo soy yo.

EDITAR: Como señala cLFlaVA ... es mejor usar auto luego scroll . Estoy de acuerdo con él.


Me sorprende que nadie haya mencionado una de mis soluciones favoritas para este problema, la etiqueta <wbr> (salto de línea opcional). Es bastante compatible con los navegadores y básicamente le dice al navegador que puede insertar un salto de línea si es necesario. También está el carácter de espacio de ancho relacionado, &#8203; con el mismo significado

Para el caso de uso mencionado, mostrar los comentarios de los usuarios en una página web, supongo que ya existe algún formato de salida para evitar ataques de inyección, etc. Por lo tanto, es fácil agregar estas etiquetas <wbr> cada N caracteres en palabras que son demasiado largas , o en enlaces.

Esto es especialmente útil cuando necesita control sobre el formato de la salida, que CSS no siempre le permite hacer.




No quería agregar bibliotecas a mis páginas solo por romper palabras. Luego escribí una función simple que proporcioné a continuación, espero que ayude a las personas.

(Se está rompiendo por 15 caracteres y aplicando "& shy;" entre, pero puede cambiarlo fácilmente en el código)

//the function: BreakLargeWords = function (str) { BreakLargeWord = function (word) { var brokenWords = []; var wpatt = //w{15}|/w/igm; while (wmatch = wpatt.exec(word)) { var brokenWord = wmatch[0]; brokenWords.push(brokenWord); if (brokenWord.length >= 15) brokenWords.push("&shy;"); } return brokenWords.join(""); } var match; var word = ""; var words = []; var patt = //W/igm; var prevPos = 0; while (match = patt.exec(str)) { var pos = match.index; var len = pos - prevPos; word = str.substr(prevPos, len); if (word.length > 15) word = BreakLargeWord(word); words.push(word); words.push(match[0]); prevPos = pos + 1; } word = str.substr(prevPos); if (word.length > 15) word = BreakLargeWord(word); words.push(word); var text = words.join(""); return text; } //how to use var bigText = "Why is this text this big? Lets do a wrap <b>here</b>! aaaaaaaaaaaaa-bbbbb-eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"; var goodText = BreakLargeWords(bigText);


Sé que este es un problema muy viejo y, dado que tenía el mismo problema, busqué una solución fácil. Como mencioné en la primera publicación, decidí usar la función de conversión de palabras php.

Consulte el siguiente ejemplo de código para obtener información ;-)

<?php $v = "reallyreallyreallylonglinkreallyreallyreallylonglinkreallyreallyreallylonglinkreallyreallyreallylonglinkreallyreallyreallylonglinkreallyreallyreallylonglink"; $v2 = wordwrap($v, 12, "<br/>", true); ?> <html> <head> <title>test</title> </head> <body> <table width="300" border="1"> <tr height="30"> <td colspan="3" align="center" valign="top">test</td> </tr> <tr> <td width="100"><a href="<?php echo $v; ?>"><?php echo $v2; ?></a></td> <td width="100">&nbsp;</td> <td width="100">&nbsp;</td> </tr> </table> </body> </html>

Espero que esto ayude.


en CSS3:

word-wrap:break-word