remove - str_replace php
Consigue los primeros n caracteres de una cuerda. (18)
$ ancho = 10;
$a = preg_replace ("~^(.{{$width}})(.+)~", ''//1…'', $a);
o con envoltura de palabras
$a = preg_replace ("~^(.{1,${width}}/b)(.+)~", ''//1…'', $a);
¿Cómo puedo obtener los primeros n caracteres de una cadena en PHP? ¿Cuál es la forma más rápida de recortar una cadena a un número específico de caracteres y agregar ''...'' si es necesario?
Desarrollé una función para este uso.
function str_short($string,$limit)
{
$len=strlen($string);
if($len>$limit)
{
$to_sub=$len-$limit;
$crop_temp=substr($string,0,-$to_sub);
return $crop_len=$crop_temp."...";
}
else
{
return $string;
}
}
solo llamas a la función con cuerda y limite
por ejemplo: str_short("hahahahahah",5)
;
se cortará de su cadena y agregará "..." al final
:)
El marco codeigniter contiene un ayudante para esto, llamado "ayudante de texto". Aquí hay algo de documentación de la guía del usuario de codeigniter que se aplica: http://codeigniter.com/user_guide/helpers/text_helper.html (solo lea las secciones word_limiter y character_limiter). Aquí hay dos funciones relevantes para tu pregunta:
if ( ! function_exists(''word_limiter''))
{
function word_limiter($str, $limit = 100, $end_char = ''…'')
{
if (trim($str) == '''')
{
return $str;
}
preg_match(''/^/s*+(?:/S++/s*+){1,''.(int) $limit.''}/'', $str, $matches);
if (strlen($str) == strlen($matches[0]))
{
$end_char = '''';
}
return rtrim($matches[0]).$end_char;
}
}
Y
if ( ! function_exists(''character_limiter''))
{
function character_limiter($str, $n = 500, $end_char = ''…'')
{
if (strlen($str) < $n)
{
return $str;
}
$str = preg_replace("//s+/", '' '', str_replace(array("/r/n", "/r", "/n"), '' '', $str));
if (strlen($str) <= $n)
{
return $str;
}
$out = "";
foreach (explode('' '', trim($str)) as $val)
{
$out .= $val.'' '';
if (strlen($out) >= $n)
{
$out = trim($out);
return (strlen($out) == strlen($str)) ? $out : $out.$end_char;
}
}
}
}
Es mejor abstraer su código así (observe que el límite es opcional y el valor predeterminado es 10):
print limit($string);
function limit($var, $limit=10)
{
if ( strlen($var) > $limit )
{
return substr($string, 0, $limit) . ''...'';
}
else
{
return $var;
}
}
Esta funcionalidad se ha incorporado en PHP desde la versión 4.0.6. Ver los documentos .
echo mb_strimwidth(''Hello World'', 0, 10, ''...'');
// outputs Hello W...
Tenga en cuenta que el trimmarker
(los puntos suspensivos anteriores) se incluyen en la longitud truncada.
Esta solución no cortará palabras, agregará tres puntos después del primer espacio. Edité la solución @ Raccoon29 y reemplacé todas las funciones con las funciones mb_ para que esto funcione en todos los idiomas, como el árabe
function cut_string($str, $n_chars, $crop_str = ''...'') {
$buff = strip_tags($str);
if (mb_strlen($buff) > $n_chars) {
$cut_index = mb_strpos($buff, '' '', $n_chars);
$buff = mb_substr($buff, 0, ($cut_index === false ? $n_chars : $cut_index + 1), "UTF-8") . $crop_str;
}
return $buff;
}
Esto es lo que hago
function cutat($num, $tt){
if (mb_strlen($tt)>$num){
$tt=mb_substr($tt,0,$num-2).''...'';
}
return $tt;
}
donde $ num representa el número de caracteres y $ tt la cadena para la manipulación.
La extensión Multibyte puede ser útil si necesitas control sobre el conjunto de caracteres de la cadena.
$charset = ''UTF-8'';
$length = 10;
$string = ''Hai to yoo! I like yoo soo!'';
if(mb_strlen($string, $charset) > $length) {
$string = mb_substr($string, 0, $length - 3, $charset) . ''...'';
}
La función que utilicé:
function cutAfter($string, $len = 30, $append = ''...'') {
return (strlen($string) > $len) ?
substr($string, 0, $len - strlen($append)) . $append :
$string;
}
Véalo en acción .
No estoy seguro de si esta es la solución más rápida, pero parece que es la más corta:
$result = current(explode("/n", wordwrap($str, $width, ".../n")));
PS Vea algunos ejemplos aquí https://.com/a/17852480/131337
Para crear dentro de una función (para uso repetido) y una longitud limitada dinámica, use:
function string_length_cutoff($string, $limit, $subtext = ''...'')
{
return (strlen($string) > $limit) ? substr($string, 0, ($limit-strlen(subtext))).$subtext : $string;
}
// example usage:
echo string_length_cutoff(''Michelle Lee Hammontree-Garcia'', 26);
// or (for custom substitution text
echo string_length_cutoff(''Michelle Lee Hammontree-Garcia'', 26, ''..'');
Si desea cortar, tenga cuidado de no dividir palabras, puede hacer lo siguiente
function ellipse($str,$n_chars,$crop_str='' [...]'')
{
$buff=strip_tags($str);
if(strlen($buff) > $n_chars)
{
$cut_index=strpos($buff,'' '',$n_chars);
$buff=substr($buff,0,($cut_index===false? $n_chars: $cut_index+1)).$crop_str;
}
return $buff;
}
si $ str es más corto que $ n_chars lo retiene sin tocar.
Si $ str es igual a $ n_chars también lo devuelve como está.
si $ str es más largo que $ n_chars, busca el siguiente espacio para cortar o (si no hay más espacios hasta el final) $ str se corta bruscamente en $ n_chars.
NOTA: tenga en cuenta que este método eliminará todas las etiquetas en caso de HTML.
a veces, necesita limitar la cadena a la última palabra completa, es decir: no desea que la última palabra se rompa, sino que se detiene con la segunda última palabra.
por ejemplo: debemos limitar "Esta es mi cadena" a 6 caracteres, pero en lugar de "Este yo ..." queremos que sea "Este ...", es decir, omitiremos las letras rotas en la última palabra.
Few, soy malo en explicar, aquí está el código.
class Fun {
public function limit_text($text, $len) {
if (strlen($text) < $len) {
return $text;
}
$text_words = explode('' '', $text);
$out = null;
foreach ($text_words as $word) {
if ((strlen($word) > $len) && $out == null) {
return substr($word, 0, $len) . "...";
}
if ((strlen($out) + strlen($word)) > $len) {
return $out . "...";
}
$out.=" " . $word;
}
return $out;
}
}
substr () sería lo mejor, también querrá verificar primero la longitud de la cadena
$str = ''someLongString'';
$max = 7;
if(strlen($str) > $max) {
$str = substr($str, 0, $max) . ''...'';
}
wordwrap no recortará la cuerda, solo la dividirá ...
$yourString = "bla blaaa bla blllla bla bla";
$out = "";
if(strlen($yourString) > 22) {
while(strlen($yourString) > 22) {
$pos = strrpos($yourString, " ");
if($pos !== false && $pos <= 22) {
$out = substr($yourString,0,$pos);
break;
} else {
$yourString = substr($yourString,0,$pos);
continue;
}
}
} else {
$out = $yourString;
}
echo "Output String: ".$out;
//The simple version for 10 Characters from the beginning of the string
$string = substr($string,0,10).''...'';
Actualizar:
Basado en sugerencias para verificar la longitud (y también asegurar longitudes similares en cuerdas cortadas y no cortadas):
$string = (strlen($string) > 13) ? substr($string,0,10).''...'' : $string;
Así obtendrá una cadena de máximo 13 caracteres; ya sea 13 (o menos) caracteres normales o 10 caracteres seguidos de ''...''
Actualización 2:
O como función:
function truncate($string, $length, $dots = "...") {
return (strlen($string) > $length) ? substr($string, 0, $length - strlen($dots)) . $dots : $string;
}
Actualización 3:
Ha pasado un tiempo desde que escribí esta respuesta y ya no uso este código. Prefiero esta función que evita romper la cadena en medio de una palabra usando la función wordwrap
:
function truncate($string,$length=100,$append="…") {
$string = trim($string);
if(strlen($string) > $length) {
$string = wordwrap($string, $length);
$string = explode("/n", $string, 2);
$string = $string[0] . $append;
}
return $string;
}
if(strlen($text) > 10)
$text = substr($text,0,10) . "...";