W3docs

substr()

La función substr() en PHP extrae una parte de una cadena. Es muy útil en aplicaciones de texto para recortar prefijos, tomar los primeros N caracteres y más.

La función substr() devuelve un fragmento de una cadena: los caracteres entre una posición de inicio y una longitud opcional. Es una de las herramientas de cadenas más utilizadas en PHP: recortar prefijos, tomar los primeros N caracteres de una etiqueta, leer un campo de ancho fijo u obtener una extensión de archivo se reducen a una llamada a substr(). Esta página cubre la sintaxis, todos los comportamientos de los argumentos $start y $length (incluidos los negativos), los casos límite que suelen causar problemas y cuándo usar mb_substr() en su lugar.

Sintaxis

substr(string $string, int $offset, ?int $length = null): string
ParámetroDescripción
$stringLa cadena de entrada de la que se extrae.
$offsetPosición de inicio basada en cero. Un valor negativo cuenta desde el final de la cadena.
$lengthOpcional. Cuántos caracteres se devolverán. Omítalo (o pase null) para leer hasta el final de la cadena. Un valor negativo significa "detener este número de caracteres antes del final."

substr() devuelve la subcadena extraída. A partir de PHP 8.0 siempre devuelve una cadena (una cadena vacía cuando no hay coincidencia); antes de PHP 8.0 devolvía false en caso de fallo, por lo que aún puede verlo en código antiguo.

Un ejemplo básico

php— editable, runs on the server

$offset es 0, por lo que la extracción comienza en el primer carácter, y $length es 5, por lo que se devuelven cinco caracteres (Hello). Recuerde que el offset está basado en cero: la posición 0 es H, la posición 1 es e, y así sucesivamente.

Cómo funciona el offset

Un offset positivo cuenta desde el inicio; un offset negativo cuenta desde el final (donde -1 es el último carácter):

<?php
$string = "Hello World!";

echo substr($string, 6);   // World!  — from offset 6 to the end
echo "\n";
echo substr($string, -6);  // World!  — last 6 characters
echo "\n";
echo substr($string, -1);  // !       — just the last character

Omitir $length devuelve todo a partir del offset en adelante, lo cual es práctico para eliminar un prefijo conocido.

Cómo funciona la longitud

Un $length positivo limita cuántos caracteres se toman. Un $length negativo se detiene ese número de caracteres antes del final de la cadena, lo que es ideal para eliminar un sufijo conocido:

<?php
$string = "Hello World!";

echo substr($string, 0, -1);   // Hello World  — drop the trailing "!"
echo "\n";
echo substr($string, -6, 5);   // World        — start 6 from the end, take 5
echo "\n";
echo substr($string, 4, 0);    // (empty)      — length 0 returns ""

Si la longitud solicitada supera el final de la cadena, substr() simplemente devuelve lo que está disponible; nunca genera un error por ser "demasiado larga."

Uso práctico: una extensión de archivo

Combinar substr() con strrpos() (que encuentra la última posición de un carácter) es la forma clásica de leer una extensión de archivo:

<?php
$filename = "report.final.pdf";
$ext = substr($filename, strrpos($filename, ".") + 1);

echo $ext; // pdf

Problemas comunes

  • Offset fuera de rango. Si $offset es mayor que la longitud de la cadena, obtendrá una cadena vacía (en PHP 8+). No da la vuelta.
  • Cuenta bytes, no caracteres. substr() trabaja con bytes. Para texto UTF-8 con letras acentuadas o emoji, cortar en medio de un carácter produce resultados incorrectos. Use mb_substr() para una extracción segura con multibyte.
  • Error por uno en la longitud. $length es un conteo, no un índice final. substr($s, 2, 3) devuelve 3 caracteres comenzando en el índice 2, no los caracteres entre el índice 2 y el índice 3.

Funciones relacionadas

  • strlen() — obtener la longitud de una cadena, que se usa frecuentemente para calcular un $length.
  • strpos() — encontrar dónde comienza una subcadena, para pasarlo a substr().
  • explode() — dividir una cadena en un array cuando se tiene un delimitador.
  • trim() — eliminar espacios en blanco (u otros caracteres) de ambos extremos.

Práctica

Práctica
¿Cuál es el uso de la función substr() en PHP?
¿Cuál es el uso de la función substr() en PHP?
Was this page helpful?