Cuando uso substr($string,0,100)
, proporciona los primeros 100 caracteres. A veces dejaba la última palabra incompleta. Eso parece extraño. ¿Puedo limitar por palabra en lugar de char?Cómo capturar palabras completas usando substr() en PHP, ¿límite por palabra?
Respuesta
Si solo cuenta las palabras, la picadura resultante podría ser muy larga ya que una sola "palabra" podría tener 30 caracteres o más. Sugeriría en cambio truncar el texto a 100 caracteres, excepto si esto hace que una palabra se trunque, entonces también debería eliminar la parte truncada de la palabra. Esto está cubierto por esta pregunta relacionada:
How to Truncate a string in PHP to the word closest to a certain number of characters?
Uso wordwrap
$your_desired_width = 100;
if (strlen($string) > $your_desired_width)
{
$string = wordwrap($string, 100);
$i = strpos($string, "\n");
if ($i) {
$string = substr($string, 0, $i);
}
}
Ésta es una versión modificada de la respuesta here. si el texto de entrada podría ser muy larga puede agregar esta línea antes de la llamada de ajuste de línea para evitar wordwrap tener que analizar todo el texto:
$string = substr($string, 0, 101);
Utilizar una expresión regular(Source)
$string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, 100));
Evitaría el uso de la función wordwrap ya que innecesariamente analizará toda la cadena. La expresión regular es la mejor de las dos, IMO. – Matthew
@konforce: acepto que la solución de expresión regular es simple y flexible, pero algunas personas no se sienten cómodas con las expresiones regulares. He propuesto una nueva versión de la solución wordwrap. ¿Está bien ahora? –
la expresión regular eliminará accidentalmente la última palabra. He agregado código para incluir un cheque. Ver la edición. –
I Haría algo como:
<?php
function cut_text($text, $len)
{
for ($i = 0; $i < 10; ++$i)
{
$c = $text[$len + $i];
if ($c == ' ' || $c == "\t" || $c == "\r" || $c == "\n" || $c == '-')
break;
}
if ($i == 10) $i = 0;
return rtrim(substr($text, 0, $len + $i));
}
echo cut_text("Hello, World!", 3)."\n";
?>
Simplemente comience en algún punto ($ len) y avance una cierta cantidad de caracteres ters ($ i) en busca de un carácter de ruptura (p. ej., espacio en blanco). También puede mirar hacia atrás (- $ i) o en ambas direcciones, dependiendo de lo que esté buscando.
$a = explode('|', wordwrap($string, 100, '|');
print $a[0];
Esto falla si el personaje | accidentalmente ocurre en $ string. Mejor uso chr (0) o algo así que nunca ocurrirá en $ string. – Peter
// Trim very long text to 120 characters. Add an ellipsis if the text is trimmed.
if(strlen($very_long_text) > 120) {
$matches = array();
preg_match("/^(.{1,120})[\s]/i", $very_long_text, $matches);
$trimmed_text = $matches[0]. '...';
}
Prueba una sola línea de código del
$string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length));
Ésta es una solución muy similar a la de Evernden de Scott, pero también funciona si el carácter | accidentalmente se produce en la cadena:
$result = explode(chr(0), wordwrap($longtext, $len, chr(0)))[0];
Probé este sencillo y funcionó para mí
<?php echo substr($content, 0, strpos($content, ' ', 200)); ?>
- 1. palabras completas Regex.Match
- 2. ¿Cómo buscar palabras completas en vim?
- 3. Buscar y reemplazar palabras completas en vim
- 4. Extracción de palabras completas
- 5. ¿Cómo navegar a través del código fuente por partes en CamelCase (en lugar de palabras completas)?
- 6. PCRE haciendo coincidir palabras completas en una cadena
- 7. Expresiones de límite de palabras Regex
- 8. ¿Combina solo palabras completas con LIKE?
- 9. icontains filtro Django coinciden con palabras completas
- 10. buscando palabras completas en Vim (carácter de guión)
- 11. función de PHP substr error()
- 12. Buscar subcadena en cadena pero solo si las palabras completas?
- 13. Regex para que coincida con palabras completas que comienzan con $
- 14. RegExp expresión regular Buscar y reemplazar sólo palabras completas
- 15. Obtenga los primeros 100 caracteres de la cadena, respetando las palabras completas
- 16. límite de palabras regex excluyendo el guión
- 17. Buscar y reemplazar palabras completas (no subcadenas) en Emacs
- 18. ¿Qué es un límite de palabras en expresiones regulares?
- 19. ¿Cómo puedo asociar una palabra rusa usando preg_replace en PHP?
- 20. ¿Cómo extiendo la selección al límite de palabras usando JavaScript, una sola vez?
- 21. ¿Cómo obtengo el substr de esta manera en c?
- 22. ¿Existe una función eficiente de búsqueda de palabras completas en Delphi?
- 23. Utilice string.gsub para reemplazar cadenas, pero solo palabras completas
- 24. manera de tener éxito "String.Replace solamente palabras completas"
- 25. Definir un carácter como un límite de palabras
- 26. Concordancia de palabras más inteligente en PHP para palabras largas?
- 27. Django substr/substring en plantillas
- 28. PHP cadena sustituir toda coincidencia de palabra
- 29. Usar grep en R para buscar cadenas como palabras completas (pero no cadenas como parte de las palabras)
- 30. Truncate String en el límite de palabras más cercano
Podría explicar con más detalle lo que su definición de una "palabra" es? ¿Estamos hablando solo de palabras en inglés? Palabras en cualquier idioma? Cualquier secuencia de letras, ya sea una palabra real o no? ¿Qué hay de los números? ¿Puntuación? Otros símbolos? Es '<<<<<<<<' una palabra? etc ... –
¿El texto de entrada podría contener nuevos caracteres de línea? –
Pruebe este enlace, puede ayudarlo http://stackoverflow.com/a/26098951/3944217 – edCoder