Cómo cortar texto de una cadena más grande en PHP

Aprende a cortar texto en PHP de forma efectiva. Explicación de como cortar texto con caracteres normales o especiales.

Programacion web cadenas de texto php

Si necesitas cortar una cadena de texto de otra más grande en PHP estás en el lugar adecuado. En este artículo voy a enseñarte como realizar esta funcionalidad de forma sencilla en PHP: con la función substr.

También veremos, como extra, cómo cortar cadenas en textos con caracteres especiales como nuestra querida letra Ñ.

Datos para cortar texto con la función substr

Para extraer una parte de una cadena de texto en php necesitamos conocer tres datos:

  1. Cuál es la cadena de texto que contiene a la subcadena.
  2. En qué posición empieza el texto a cortar.
  3. Cuántos caracteres queremos cortar.

Con estos tres datos ya puedes obtener una subcadena de una cadena de texto de mayor tamaño.

Obtener una parte de una cadena de texto con PHP

Como he mencionado antes, para obtener una parte de un texto en PHP usaremos por norma general la función substr(). Esta función es capaz de extraer una porción de texto de un texto mayor con los tres datos anteriormente mencionados.

Sabido esto, en las siguientes líneas te voy a explicar las dos funcionalidades que permite realizar la función substr de PHP:

  1. El uso formal de la función substr, es decir, extraer una porción de un texto desde una posición inicial a una final.
  2. Cortar texto desde inicio hasta el final MENOS un número de caracteres concreto.
  3. Cortar texto que empieza en el carácter inicial calculado de la siguiente forma: posición final menos número de caracteres indicado.
  4. Y la forma alternativa para cortar los últimos X caracteres de un texto.

1. Uso normal de la función substr de PHP

Veamos primero cuál es la definición de la función substr según el manual PHP:

string substr ( string $string , int $start [, int $length ] )

Ahora de una forma simplificada:

cadena_cortada = substr( cadena_de_texto, posicion_caracter_inicial, [longitud_del_texto_a_cortar]);

La función substr() de PHP devuelve la parte del texto “cortada” con los datos proporcionados como segundo y tercer parámetro (posición inicial y longitud de cadena).

El tercer parámetro de la función es opcional (por eso lo he indicado entre corchetes). Si no introduces el tercer parámetro, la función cortará el texto que hay desde la posicion_caracter_inicial hasta el final de cadena_de_texto.

Ejemplo de uso normal de la función substr

<?php
$cadena = “Esta es el texto principal”;
$subcadena = substr ( $cadena, 0, 4);
echo $subcadena; //imprime: Esta
?>

En el ejemplo he cortado los cuatro primeros caracteres de la cadena $cadena. El “0” le indica dónde quiero que empiece a cortar el texto y el 4 que el texto que quiero obtener tiene 4 caracteres de longitud.

2. Forma alternativa de utilizar substr() con posición final negativa

Existe una segunda forma de utilizar la función substr de PHP, y esta es indicando un entero negativo en el tercer parámetro de la función. Con este ligero cambio indicamos a la función que debe de cortar desde la posición inicial hasta la posición final del texto MENOS los caracteres indicados.

<?php
$cadena = "Esta es el texto principal";
$subcadena = substr ( $cadena, 0, -4);
echo $subcadena; //imprime: Esta es el texto princ
?>

Esta forma de utilizar la función substr es increíblemente útil cuando queremos quitar una parte final de una palabra o texto. Lo que en  Por ejemplo:

<?php
$cadena = "mensaje-ESP";
$subcadena = substr ( $cadena, 0, -4);
echo $subcadena; //imprime: mensaje
?>

3. Forma alternativa de substr() con posición inicial negativa

También disponemos de la posibilidad de comenzar a cortar la cadena contando caracteres desde la posición final de la cadena. Para ello vamos a indicar en la posición inicial un valor negativo que se calculará contando desde el final de la cadena.

Veamos un ejemplo:

<?php
$cadena = "mensaje-ESP";
$subcadena = substr ( $cadena, -4, 2);
echo $subcadena; //imprime: -E
?>

4. Cortar desde posición inicial negativa hasta el final

Por último, veamos la forma alternativa para cortar unos caracteres finales conociendo su longitud. Una forma de uso de substr realmente útil cuando queremos cortar algún sufijo conocido por nosotros. Un ejemplo sería cortar la extensión de una imagen:

<?php
$cadena = "mi-imagen.jpg";
$subcadena = substr ( $cadena, -3);
echo $subcadena; //imprime: jpg
?>

En este ejemplo habrás visto como he obtenido los tres últimos caracteres indicando en el parámetro de caracter inicial un valor negativo, de esta forma, la función substr a empezado a cortar desde (posición final - 3).

Extra: cortar texto con caracteres UTF-8

Si necesitas cortar las cadenas de caracteres en textos formados por caracteres especiales (UTF-8) te recomiendo que olvides la función substr. Si utilizas la funcion substr para cortar en estos textos obtendrás resultados inesperados, ya que contará en muchas ocasiones un solo carácter especial como varios, resultando en una contabilización incorrecta.

Necesitarás para este fin la función equivalente para caracteres multi-byte de PHP: la función mb_substr(). Esta función realiza la misma funcionalidad que su homónima para caracteres ASCII, asi que la utilización es similar exceptuando un punto, la codificación de caracteres de la cadena que se utiliza.

Veamos entonces, como antes, la definición del manual de PHP para esta función:

string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )

Y si la traduzco de forma más simplificada:

cadena-cortada = mb_substr ( cadena-de-texto, posición-carácter-inicial, [longitud-del-texto-a-cortar], [codificación-de-caracteres]);

Aunque como datos obligatorios (los que NO están entre corchetes) solo son los datos cadena-de-texto y posición-carácter-inicial, normalmente indicaremos la codificación de la cadena-de-texto.

Veamos un ejemplo de uso:

<?php
$texto = ‘Lección con UTF-8’;
$cadena_cortada = mb_substr($texto, 8, null, "UTF-8");
echo $cadena_cortada; //imprime “con UTF-8”
?>

Este pequeño script es similar a los ejemplos anteriores con la particularidad de que he indicado la codificación UTF-8 para que interprete los caracteres usados en $texto. También, como particularidad, verás que he indicado NULL en el tercer parámetro para que se ignore (y no se use), ya que quiero cortar desde el carácter 8 hasta el final.

Nota: como dato adicional comentar que si no indicamos la codificación en la función mb_substr, se utilizará la indicada por defecto en el sistema con, por ejemplo, la función  mb_internal_encoding("UTF-8");

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.