jueves, 22 de enero de 2009

Manual de PHP 22. Formatos: Cadenas Alfanuméricas

Funciones de cadenas

Algunas de las funciones que permiten manejar los formatos de las cadenas de caracteres son estas:

chr(n)

Devuelve el carácter cuyo
código ASCII es n.

ord(cadena)

Devuelve el código ASCII del primero de los caracteres de la cadena.

strlen(cadena)

Devuelve la longitud (número de caracteres) de la cadena. Los espacios son considerados como un caracter más.

strtolower(cadena)

Cambia todos los caracteres de la cadena a minúsculas.

strtoupper(cadena)

Convierte en mayúsculas todos los caracteres de la cadena.

ucwords(cadena)

Convierte a mayúsculas la primera letra de cada palabra.

ucfirst(cadena)

Convierte a mayúsculas la primera letra de la cadena y pone en minúsculas todas las demás.

ltrim(cadena)

Elimina todos los espacios que pudiera haber al principio de la cadena.

rtrim(cadena)

Elimina todos los espacios que existieran al final de la cadena.

trim(cadena)

Elimina los espacios tanto al principio como al final de la cadena

chop(cadena)

Elimina los espacios al final de la cadena. Es idéntica a rtrim.

Advertencia

Tanto trim, como ltrim y rtrim eliminan, además de los espacios, las secuencias: \n, \r, \t, \v y \0; llamadas también caracteres protegidos.

substr(cadena,n)

Si el valor de n es positivo extrae todos los caracteres de la cadena a partir del que ocupa la posición enésima a contar desde la izquierda.

Si el valor de n es negativo serán extraídos los n últimos caracteres contenidos en la cadena.

substr(cadena,n,m)

Si n y m son positivos extrae m caracteres a partir del que ocupa la posición enésima, de izquierda a derecha.

Si n es negativo y m es positivo extrae m (contados de izquierda a derecha) a partir del que ocupa la posición enésima contada de derecha a izquierda.

Si n es positivo y m es negativo extrae la cadena comprendida entre el enésimo carácter (contados de izquierda a derecha) hasta el emésimo, contando en este caso de derecha a izquierda

Si n es negativo y m también es negativo extrae la porción de cadena comprendida entre el emésimo y el enésimo caracteres contando, en ambos casos, de derecha a izquierda. Si el valor absoluto de n es menor que el de m devuelve una cadena vacía.

str_replace( cadena_buscada, cadena_que_la_reemplazará, cadena_completa)

Sustitiye todas las apariciones de la aguja en el pajar por la cadena

string str_replace ( string aguja, string cad, string pajar)

Esta función sustituye todas las apariciones de la aguja en el pajar por la cad dada_ Si no precisa reglas especiales de sustitución, deberá usar siempre esta función en lugar de ereg_replace()_

Ejemplo 1_ Ejemplo de str_replace()

$bodytag = str_replace ("%cuerpo%", "negro", "esto sustituirá la palabra %cuerpo% por negro");

Esta función tiene seguridad binaria_



strrev(cadena)

Devuelve la cadena invertida

str_repeat(cadena, n)

Devuelve la cadena repetida tantas veces como indica n.

str_pad(cad, n, rell, tipo)

Añade a la cadena cad los caracteres especificados en rell (uno o varios, escritos entre comillas) hasta que alcance la longitud que indica n (un número)

El parámetro tipo puede tomar uno de estos tres valores (sin comillas):
STR_PAD_BOTH (rellena por ambos lados)
STR_PAD_RIGHT (rellena por la derecha)
STR_PAD_LEFT (rellena por la izquierda).

Si se omite la cadena de Relleno utilizará espacios y si se omite el tipo rellenará por la derecha

AddSlashes(cadena)

Inserta el carácter \ delante los siguientes: ", ', \ y NUL (el bit nulo).

stripslashes(cadena)

Quita las marcas añadidas a una cadena con la función AddSlashes().

chunk_split(cad, n, sep )

Devuelve la cadena (cad) después de haberle insertado, cada n caracteres, la cadena indicada en el parámetro sep.
Si no se indica sep PHP pondrá un espacio.
Si no se establece el parámetro n insertará el separador cada 76 caracteres.
Esta función coloca siempre un separador al final de la cadena.

parse_str(cadena)

Devuelve las variables –con su valor– indicadas dentro de la cadena (observa la sintaxis del ejemplo).
Dentro de la cadena cada variable se denomina con un nombre que va seguido de un signo igual. Los espacios se señalan con el signo + y los separadores de variables son signos &

explode(sep, cad,n)

Devuelve un array cuyos elementos contienen cada una de las porciones de la cadena (cad) comprendidas entre dos de los caracteres señalados como (sep) hasta el máximo de porciones señaladas (n).
Los caracteres separadores no son incluídos en las cadenas resultantes. Si no se indica la cantidad de porciones, será fraccionada toda la cadena.
Si se indica número, el último trozo contendrá toda la cadena restante.

implode(sep, array)

Devuelve una cadena formada por todos los elementos del array separados mediante los caracteres indicados en sep.

join(sep, array)

Es idéntica a implode.

strtok(cad , sep)

Esta función divide la cadena cad en trozos delimitados por el separador que se indica en sep.
Cuando se invoca la primera vez –extrae el primer trozo– debe llevar las sintaxis strtok(cadena,sep).
Al invocarla sucesivamente, se escribe solo strtok (" ") e irá recogiendo de forma secuencial los trozos sucesivos.

Encriptación de cadenas

PHP dispone de funciones que permiten codificar o encriptar cadenas de caracteres.

bin2hex(cadena)

Devuelve una cadena ASCII que contiene la representación hexadecimal de la cadena. La conversión se realiza byte a byte, con los 4 bits superiores primero.

crypt(cadena)

Devuelve la cadena encriptada utilizando una semilla aleatoria de dos caracteres.

Por su caracter aleatorio, si se ejecuta dos veces seguidas –tal como puedes observar en el ejemplo– dará dos resultados diferentes.

crypt(cadena,"xx")

Devuelve la cadena encriptada utilizando como semilla los dos caracteres (entre comillas) que se escriben como segundo parámetro de la función.
Tanto en este supuesto como en el anterior, los dos primeros caracteres de la cadena encrip- tada coinciden con los que han sido utilizados como semilla.

md5(cadena,"xx")

Aplica el algoritmo md5 y devuelve la huella digital generada por él.

Este algoritmo presenta como peculiaridades que –tenga la dimensión que tenga la cadena a la que se aplique– genera siempre una huella digital que no es otra cosa que una cadena formada por 32 caracteres y que no dispone de ningún mecanismo inverso.

Seguramente habrás vivido esta experiencia. En muchos espacios de Internet –grupos de noticias, cuentas de correo web, etcétera– que requieren un login y una contraseña cuando utilizas la opción de recuperar contraseñas no te envían tu contraseña anterior, sino que te generan y envían una nueva.

Esto ocurre porque, por razones evidentes de seguridad, las contraseñas se almacenan usando estas huellas digitales y resulta imposible recuperar los valores originales.

La única solución en estos casos es crear una nueva contraseña (suelen hacerlo con las funciones de números aleatorios), enviarla de forma automática por correo electrónico y sustituir el valor anterior del registro de usuarios por el resultado de la codificación md5 de la nueva contraseña

crc32(cadena)

Aplica el algoritmo crc32 de comprobación de integridad y devuelve el valor del mismo.

Se utiliza muchísimo en los programas de compresión y descompresión de ficheros. Se aplica en el momento de comprimir y se incluye el valor obtenido dentro del fichero comprimido. Después de la descompresión se vuelve a aplicar el mismo algoritmo y se comparan ambos valores. La coincidencia será la garantía de que el fichero obtenido es idéntico al original.

Formatos en cadenas

printf(cadena de formato,variable1,variable2,..)
Cadena de formato
Dentro de la cadena de formatos deben repetirse tantos formatos como variables se pretenda manejar

"%[rell1][alin1][anc1][prec1][tipo1][sepa1]%[rell1][alin1][anc1][prec1][tipo1][sepa1]"
Hemos de mencionar aquí los separadores ya que no fueron mencionados en la página anterior

Se puede introducir una cadena de separación al final de una cadena de formato que puede hacer, entre otras, función de separación entre dos cadenas.
Por ejemplo, printf("%'*15.2f Euros",1475.875) nos devolvería:

********1475.88 Euros

La función printf() permite presentar varios valores o variables con distintos formatos utilizando la sintaxis que se indica más arriba.

Este ejemplo :

printf("%'*15.2f Euros=%'*18.0f Pesetas",1475.875,1475.875*166.386)

devuelve como resultado:

********1475.88 Euros=************245565 Pesetas

Existe otra función PHP con características muy similares a la anterior. Se trata de sprintf().

La sintaxis es idéntica sprintf (cadena de formato, variable1,variable2, ...) y su única diferencia con printf es que, mientras que printf() imprime las variables utilizando el formato indicado, sprintf() puede guardar en una nueva variable la cadena resultante de la aplicación del formato.


Otras funciones con cadenas

Estos son algunos ejemplos de aplicación de las funciones de manejo de cadenas

Código ASCII y viceversa
Función Ejemplo Resultado
chr(código ASCII) chr(97) a
ord("cadena") ord("abadesa") 97
Longitudes y conversiones mayúsculas/minúsculas
Función Ejemplo Resultado
strlen("cadena") strlen("Mide la longitud de esta cadena") 31
strtolower("cadena") strtolower("CONVIERTE A MINÚSCULAS") convierte a minúsculas
strtoupper("cadena") strtoupper("pasa a mayúsculas") PASA A MAYÚSCULAS
ucwords("cadena") ucwords("todas empiezan por mayúscula") Todas Empiezan Por Mayúscula
ucfirst("cadena") ucfirst("mayúscula al principio") Mayúscula al principio
Eliminar espacios
Función Ejemplo Resultado
ltrim("cadena") ltrim("\n \nEliminar espacios") Eliminar espacios
rtrim("cadena") rtrim("Eliminar espacios\n \n") Eliminar espacios
trim("cadena") trim("\n \nEliminar espacios\n \n") Eliminar espacios
chop("cadena") chop("\n \nEliminar espacios\n \n") Eliminar espacios
Extraer porciones de una cadena
Función Ejemplo Resultado
substr("cadena",n) substr("Extrae caracteres",3) rae caracteres
substr("cadena",n) substr("Extrae caracteres",0) Extrae caracteres
substr("cadena",n) substr("Extrae caracteres",-5) teres
substr("cadena",n) substr("Extrae caracteres",-2) es
substr("cadena",n,m) substr("Extrae caracteres",2,6) trae c
substr("cadena",n,m) substr("Extrae caracteres",0,8) Extrae c
substr("cadena",n,m) substr("Extrae caracteres",2,-3) trae caracte
substr("cadena",n,m) substr("Extrae caracteres",-7,5) acter
substr("cadena",n,m) substr("Extrae caracteres",-7,-5) ac
substr("cadena",n,m) substr("Extrae caracteres",-5,-7)
Modificaciones de cadenas
Función Ejemplo Resultado
strrev("cadena") strrev("Invierte la cadena") anedac al etreivnI
str_repeat("cadena",n) str_repeat("Rep",5) RepRepRepRepRep
str_pad("cadena",n,"Relleno",Tipo) str_pad("Pepe",10,"*",STR_PAD_BOTH) ***Pepe***
str_pad("cadena",n,"Relleno",Tipo) str_pad("Pepe",10,"*",STR_PAD_LEFT) ******Pepe
str_pad("cadena",n,"Relleno",Tipo) str_pad("Pepe",10,"*",STR_PAD_RIGHT) Pepe******
str_pad("cadena",n,"Relleno",Tipo) str_pad("Pepe",10,"*") Pepe******
str_replace ("lo que dice",lo que dira,"Cadena") str_replace("e","a","Pepe") Papa
str_replace ("lo que dice",lo que dira,"Cadena") str_replace("pe","pa","Pepepe") Pepapa
str_replace ("lo que dice",lo que dira,"Cadena") str_replace("Pepe","Luis","Pepe") Luis
substr_replace ("Cadena",lo que dira,n,m) substr_replace("Pepe","Luis",2,-1) PeLuise


Formatos de salida

Estos son algunos ejemplos en los que continuamos con las aplicaciones de las funciones PHP al manejo de cadenas:

Marcas, divisiones y uniones de cadenas
Variable cadena Sintaxis Resultado
$a="Esta ' y \ y también NUL" AddSlashes($a) $a="Esta \' y \\ y también NUL"
$a="Esta \' y \\ y también NUL" stripslashes($a) Esta ' y y también el nulo
$a="Esta es una cadena larga que presuntamente será troceada" chunk_split($a,5,"–") Esta –es un–a cad–ena l–arga –que p–resun–tamen–te se–rá tr–ocead–a–
$a="Esta es una cadena larga que presuntamente será troceada" chunk_split($a,5) Esta es un a cad ena l arga que p resun tamen te se rá tr ocead a
$a="Esta es una cadena larga que presuntamente será troceada" chunk_split($a,76,"-") Esta es una cadena larga que presuntamente será troceada-
$todo="v1=Esto+sera+una+variable&v2=esto+otra&p[]=incluso+un+array"
Divide la cadena $todo en sus componentes parse_str($todo);
echo $v1;
echo $v2;
echo $p[0];
Esto sera una variable
esto otra
incluso un array
$a="Esta cadena sera devuelta en trozos"
Recogerá en un array cada uno de los trozos delimitados por los separadores $trozo1=explode(" ",$a);
echo $trozo1[0];
echo $trozo1[1];
echo $trozo1[2];
echo $trozo1[3];
echo $trozo1[4];
echo $trozo1[5];
Esta
cadena
sera
devuelta
en
trozos
Recogerá en un array cada uno de los trozos delimitados por los separadores $trozo2=explode("a",$a);
echo $trozo2[0];
echo $trozo2[1];
echo $trozo2[2];
echo $trozo2[3];
echo $trozo2[4];
echo $trozo2[5];
Est
c
den
ser
devuelt
en trozos
Recogerá en un array cada uno de los trozos delimitados por los separadores hasta un máximo de 3 $trozo3=explode(" ",$a,3);
echo $trozo3[0];
echo $trozo3[1];
echo $trozo3[2];
echo $trozo3[3];
echo $trozo3[4];
echo $trozo3[5];
Esta
cadena
sera devuelta en trozos


Recogerá en un array cada uno de los trozos delimitados por los separadores hasta un máximo de 3 $trozo4=explode("a",$a,3);
echo $trozo4[0];
echo $trozo4[1];
echo $trozo4[2];
echo $trozo4[3];
echo $trozo4[4];
echo $trozo4[5];
Est
c
dena sera devuelta en trozos


implode(" ",$trozo1) Esta cadena sera devuelta en trozos
implode("*",$trozo2) Est* c*den* ser* devuelt* en trozos
implode("-",$trozo3) Esta-cadena-sera devuelta en trozos
implode(":",$trozo4) Est: c:dena sera devuelta en trozos
join(" ",$trozo1) Esta cadena sera devuelta en trozos
join("*",$trozo2) Est* c*den* ser* devuelt* en trozos
join("-",$trozo3) Esta-cadena-sera devuelta en trozos
join(":",$trozo4) Est: c:dena sera devuelta en trozos
$cadena="Esta cadena será dividida con la función strtok"
$trocin = strtok ($cadena," ");

while ($trocin) {
echo "$trocin
";
$trocin = strtok (" ");
}
Esta
cadena
será
dividida
con
la
función
strtok
$trocin = strtok ($cadena," ");
echo $trocin,"
";
$trocin1 = strtok (" ");
echo $trocin1,"
";
$trocin2 = strtok (" ");
echo $trocin2,"
";
Esta
cadena
Esta
$trocin = strtok ($cadena,"a");
while ($trocin) {
echo "$trocin
";
$trocin = strtok ("a");
}
Est
c
den
será dividid
con l
función strtok
Encriptaciones y codificaciones
Variable cadena Sintaxis Resultado
$a="Esta es la cadena" bin2hex($a) 45737461206573206c6120636164656e610a
$a="Encriptame" crypt($a) $1$Mz4.lw/.$MOSCaVDKLTI9xS19gGIkM0
$a="Encriptame" crypt($a) $1$KM4.Li3.$S2uxnG/wCrCWO47p83bUM0
$a="Encriptame" crypt($a,"zq") zqQ4qOeELzPFg
$a="Encriptame" crypt($a,"zq") zqQ4qOeELzPFg
$a="Encriptame" crypt($a,"@$") @$eKFJms35tL.
$a="Encriptame" md5($a) 67c3ca0aefda2595138168a85e7b33a0
$a="Encriptame" md5($a) 67c3ca0aefda2595138168a85e7b33a0
$a="Encriptame" crc32($a) -1128189886
Búsquedas y recuentos de caracteres
Variable cadena Sintaxis Resultado
$a="Contando caracteres" count_chars($a,0) Array
$a="Contando caracteres" $b=count_chars($a,0);
echo $b[97];
3
$a="Contando caracteres" $b=count_chars($a,0);
echo $b[ord("o")]
2
$a="Pepe Perez el perverso pecador en penitencia" substr_count($a,"Pe"); 2
$a="Pepe Perez el perverso pecador en penitencia" substr_count($a,"pe"); 4

La función count_char($a,0) devuelve un array cuyos índices son los códigos ASCII de los caracteres y cuyos valores son el número de veces que se repite cada uno de ellos.

La función substr_count($a,"cadena") determina el número de veces que aparece la cadena dentro de $a. Diferencia entre mayúsculas y minúsculas.





Fuente:
Página del ifstic: http://www.isftic.mepsyd.es/formacion/enred/

No hay comentarios: