may 092012
 

( Read this post in english )

Inicializar una variable con un literal de cadena de texto

Para inicializar la variable, el literal se escribe entre comillas simples ( ‘ ) o dobles ( ” ). Ejemplo:

$cadena = "Buenos días";
$cadena = 'Buenos días';

La diferencia entre los dos modos de escribir el literal es que si en el interior de la cadena entre comillas dobles hay variables o caracteres especiales, se realiza la sustitución de sus valores, mientras que si la cadena está entre comillas simples no se realiza. Por ejemplo, el código:

$texto = "días";
$cadena_uno = "Buenos $texton"; 
$cadena_dos = 'Buenos $texton';
echo $cadena_uno;
echo $cadena_dos;

Imprime el siguiente resultado:

Buenos días
Buenos $texton

Vemos que en la primera línea, se ha sustituido la variable $texto por su valor “días” y también se ha sustituído “n” por un salto de línea. Por el contrario, en la segunda línea no se ha realizado ninguna de estas sustituciones.

Obtener la longitud de una cadena de texto

Para esto utilizamos la función ‘strlen’

$cadena = "Buenos días";
$longitud = strlen($cadena);

Pero la función ‘strlen’ devuelve el número de bytes de la cadena. Si lo que queremos es obtener el número de caracteres, y la cadena de texto está en un formato “multibyte” como por ejemplo UTF-8, debemos utilizar la función ‘mb_strlen’.

Ejemplo:

Creamos un fichero con un script PHP. El propio fichero está en formato UTF-8, ya que esta es la codificación por defecto en nuestro ordenador. El contenido del fichero es el siguiente:

<?php
 $cadena = "adiós";
 echo "Número de bytes de la cadena: " . strlen($cadena) . "n";
 echo "Número de caracteres de la cadena: " . mb_strlen($cadena,'UTF-8') . "n";
?>

Al ejecutar el script, el resultado es:

Número de bytes de la cadena: 6
Número de caracteres de la cadena: 5

Concatenar cadenas de texto

Para ello se utiliza el operador “.”:

$cadena_uno = "Buenos";
$cadena_dos = "días";
$cadena = $cadena_uno . " " . $cadena_dos;

También existe la función ‘implode’, que concatena un array de cadenas de texto, uniendolas con un delimitador.

Dividir una cadena en elementos separados por un delimitador

Con la función ‘explode’ se puede descomponer una cadena de texto que contiene una serie de elementos separados por un delimitador (coma, tabulación,…) en un array:

$delimitador = ",";
$datos = "pedro,gonzaled,34,avda. grande,10";
list ($nombre,$apellido,$edad,$direccion,$numero) = explode($delimitador,$datos);

Extraer una subcadena

Para ello utilizamos la función ‘substr’ (o bien ‘mb_substr’ si la cadena de texto está codificada en UTF-8, como se expone más abajo):

$subcadena = substr ( $cadena , $desde [, $numbytes] );

En donde:

  • $desde es la posición a partir de la cual extraer la subcadena, contando a partir de cero.
  • $numbytes es el número de bytes a extraer. Si no se indica $numbytes, se extraen todos los bytes desde $desde hasta el final de la cadena.

Por otra parte, si $desde es negativo, indica una posición desde el fin de la cadena hacia atrás.

También si $numbytes es negativo, indica una posición a contar desde el fin de la cadena hacia atrás.

Ejemplos:

<?php
$subcadena = substr("abcdef", 2);  // devuelve "cdef"
$subcadena = substr("abcdef", 2, 4);  // devuelve "cdef"
$subcadena = substr("abcdef", 0, -1);  // devuelve "abcde"
$subcadena = substr("abcdef", 2, -1);  // devuelve "cde"
$subcadena = substr("abcdef", 4, -4);  // devuelve false
$subcadena = substr("abcdef", -3, -1); // devuelve "de"
?>

Extraer una subcadena de una cadena de texto UTF-8

Si la cadena de texto está codificada en UTF-8 en lugar de ‘substr’ debemos utilizar la función ‘mb_substr’. Esto se debe a que la función ‘substr’ asume que cada carácter ocupa un sólo byte, mientras que en UTF-8 un carácter puede ocupar varios bytes.

Ejemplo:

<?php
// Suponemos que este script (y por lo tanto, los literales que contiene)
// está codificado en utf-8
$subcadena = substr("Peñíscola", 0, 7);  // devuelve "Peñís"
$subcadena = mb_substr("Peñíscola", 0, 7, 'UTF-8'); // devuelve "Peñísco"
?>

Procesar una cadena de texto carácter a carácter

Una cadena de texto puede ser tratada como un array, de modo que se puede hacer referencia a cada byte de la cadena como un elemento del array, y modificarlo si se desea:

$cadena = "Buenos días";
$cadena[3] = 'X'; // Modificar el cuarto byte
for ($i = 0, $j = strlen($cadena); $i < $j; $i++) {
    echo $cadena[$i].', ';
}

Si la cadena está codificada en utf8, el resultado puede no ser el esperado, porque el acceso se realiza byte a byte. El resultado del script, del ejemplo en este caso sería:

B, u, e, X, o, s,  , d, �, �, a, s,

En este caso, se pueden utilizar las funciones mb_strlen y mb_substr para obtener el resultado deseado:

for ($i = 0, $j = mb_strlen($cadena,'UTF-8'); $i < $j; $i++) {
        echo mb_substr($cadena,$i,1,'UTF-8') . ', ';
}

 Publicado por en 6:16 pm

 Deja un comentario

(requerido)

(requerido)


+ tres = 9