HOWTO · PHP
Cómo eliminar el último carácter de una cadena en PHP
Este artículo introduce cómo eliminar el último carácter de una cadena en PHP. Incluye la función rtrim() y la función substr(). Descubre los mejores métodos para la manipulación de cadenas en PHP y mejora tus habilidades de programación con ejemplos prácticos y explicaciones claras.
En esta página
Eliminar contenido del final de una cadena en PHP
Para eliminar contenido del final de una cadena en PHP, elige la función según lo que deba eliminarse. Usa rtrim() para eliminar cualquier número de bytes finales que pertenezcan a un conjunto de caracteres especificado. Usa substr() con una longitud de -1 para conservar la cadena excepto su byte final. Las cadenas de PHP están orientadas a bytes, así que usa una función compatible con multibyte cuando “carácter” signifique un carácter Unicode completo.
Usa rtrim() para eliminar un conjunto de caracteres finales
rtrim() elimina caracteres del lado derecho de una cadena mientras pertenezcan a su segundo argumento, llamado máscara de caracteres. La máscara es un conjunto de caracteres elegibles, no un sufijo que deba coincidir como una secuencia completa. La función sigue eliminando bytes de ese conjunto hasta que llega a un byte que no está en la máscara. Como resultado, puede eliminar varios caracteres finales diferentes y copias repetidas de un mismo carácter.
Para un valor que puede terminar con cualquiera de dos signos de puntuación, este ejemplo completo aplica la máscara !?:
<?php
$value = "report!?!!";
$clean = rtrim($value, "!?");
echo $clean, PHP_EOL;
report
Los signos de exclamación finales y el signo de interrogación pertenecen todos a la máscara, por lo que cada uno se elimina del final hasta llegar a la t anterior.
Usa este método cuando la regla sea “eliminar la puntuación final o el relleno de este conjunto”. Especifica solo los caracteres que deberían poder eliminarse. Por ejemplo, la máscara !?. permite que se elimine cualquier secuencia de esos tres caracteres al final; no significa “eliminar el sufijo literal !?.”. Si la cadena termina con un carácter fuera de la máscara, ese carácter y todo lo anterior permanecen. Una cadena vacía permanece vacía.
Usa substr() para eliminar el carácter final
Para una cadena ASCII en la que el objetivo es eliminar exactamente su último carácter, substr($string, 0, -1) conserva el prefijo y omite el byte final. El desplazamiento inicial 0 comienza al principio de la cadena. Una longitud negativa cuenta hacia atrás desde el final, por lo que -1 hace que la parte devuelta se detenga un byte antes del final.
<?php
$string = "Hello World!";
$withoutLastByte = substr($string, 0, -1);
echo $withoutLastByte, PHP_EOL;
Hello World
Este código omite el byte final independientemente de que sea una letra, un signo de puntuación o un espacio; a diferencia de rtrim(), no comprueba el valor del byte.
Las cadenas de PHP y substr() están orientados a bytes. En UTF-8, un carácter mostrado puede usar varios bytes, por lo que eliminar un byte de una cadena que termina en un carácter multibyte puede dejar una secuencia de bytes incompleta en lugar de eliminar un carácter completo. Para eliminar un carácter Unicode, usa mb_substr($string, 0, -1, 'UTF-8') con la extensión mbstring habilitada. Elige la codificación que coincida con los datos cuando no sea UTF-8.
Elige el enfoque adecuado y gestiona los casos límite
Usa rtrim() cuando la regla de eliminación nombre un conjunto de caracteres finales y pueda eliminar varios de ellos. Usa substr() cuando la regla sea descartar un número fijo de bytes independientemente de sus valores. Para un valor ASCII simple y un carácter final, substr($string, 0, -1) expresa esa intención directamente. Para un relleno formado por varios caracteres posibles, proporciona a rtrim() la máscara exacta que deseas.
Ambas funciones devuelven una cadena; ninguna cambia la variable original en su sitio. Asigna el resultado si el código posterior necesita el valor limpio. Antes de elegir un método, considera si la entrada puede estar vacía, si el carácter de destino está realmente presente al final y si los datos usan codificación multibyte. La cadena vacía permanece vacía con cualquiera de las dos operaciones, mientras que rtrim() deja sin cambios un final que no coincide. substr() sigue eliminando un byte sin comprobar su significado.
Una regla práctica es usar rtrim() para un conjunto de caracteres finales y substr() para un número fijo de bytes. Si “carácter” significa un punto de código Unicode completo en tu aplicación, usa la función de cadena multibyte correspondiente y asegúrate de que su extensión y codificación estén configuradas. Estas distinciones también ayudan al adaptar los ejemplos: cambia la máscara para definir qué bytes finales pueden eliminarse, o cambia la longitud de substr() para definir cuántos bytes deben omitirse.