2010-08-17 22 views
11

En la actualidad, el método que utilizo para truncar cadenas es: echo substr($message, 0, 30)."..";PHP: truncar adecuadamente con cadenas ".."

¿Cómo se muestran los puntos sólo en el caso de que la cadena se ha truncado?

+0

¿Por qué dos puntos en lugar de los tres habituales? No todas las desviaciones de la norma son buenas. Si te preocupa el personaje "perdido", puedes tener la elipse hiperbólica (así se llaman los tres puntos) en el carácter * uno *, gracias a Unicode: '...' (intenta seleccionarlo con el mouse, podrás ver que de hecho es solo un personaje). –

+0

Además, una elipsis hiperbólica NO es de tres puntos o puntos. La elipsis es una entidad completamente separada, y no debe ser reemplazada por tres puntos, ya que ambos tienen diferentes propiedades como caracteres, y también ocupan diferentes espacios en el texto. Usa el personaje real de elipsis en su lugar. – junkfoodjunkie

Respuesta

15

simplemente marque la longitud para ver si es más de 30 caracteres o no:

if (strlen($message) > 30) 
{ 
    echo substr($message, 0, 30).".."; 
} 
else 
{ 
    echo $message; 
} 

El nitpick tipográfica en mí tiene esto para añadir: el carácter correcto a utilizar es la elipsis que comprende este personaje , tres puntos ..., o su entidad HTML ….

+0

¡Ja! Usted fue 18 segundos más rápido :) – sprain

+1

+1 porque el uso de & hellip; – fabrik

+2

(Especialmente @fabrik y quien sea que lo haya votado :) Usar entidades con nombre en HTML está en desuso - no lo hagas, ya que los navegadores (¡modernos!) Se ahogarán cuando se usen junto con XHTML. Una mejor solución es usar siempre el carácter directamente, junto con una codificación correcta, es decir, UTF-8 o similar. Pero +1 por mencionar el símbolo correcto, no obstante. –

5

Simplemente compruebe la longitud de la cadena original para ver si se debe truncar. Si se trata de más de 30, truncar la cadena y añadir los puntos en el final:

if (strlen($message) > 30) { 
echo substr($message, 0, 30).".."; 
} else { 
echo $message; 
} 
4
if (strlen($message) > 30) { 
    echo substr($message, 0, 30) . ".."; 
} else { 
    echo $message; 
} 
0

agregar una condición strlen()?

1

que podría hacer:

echo strlen($message) > 30 ? substr($message, 0, 30) . '..' : $mssage; 

Básicamente, es como (pero más corto):

if (strlen($message) > 30) { 
    echo substr($message, 0, 30) . ".."; 
} else { 
    echo $message; 
} 
+0

más corto pero es un lenguaje bárbaro, a diferencia del inglés simple y simple 'if str [ing] len [gth] [del] mensaje más de 30 ... ' –

+0

Cierto, pero me gusta la sintaxis ternaria para este tipo de cosas. Es más corto y más al grano. También es el escenario de libro de texto para su uso (lógica de bifurcación con el mismo "resultado" con ambas ramas) ... – ircmaxell

4

Cabe señalar que los strlen() función no cuenta caracteres, contando en bytes. Si está utilizando la codificación UTF-8, puede terminar con 1 carácter contado como de hasta 4 bytes. La forma correcta de hacer esto sería algo como:

echo mb_strlen($message) > 30 ? mb_substr($message, 0, 30) . "..." : $message;