Foros del Web » Programando para Internet » PHP »

[Solucionado] Funcion substr() da problemas.

Estas en el tema de [Solucionado] Funcion substr() da problemas. en el foro de PHP en Foros del Web. Hola amigos, estoy diseñando un pequeño algoritmo para encripar texto raso y al usar la funcion substr() en parte del proceso recibo caracteres como la ...
  #1 (permalink)  
Antiguo 27/07/2009, 07:40
Avatar de anf
anf
 
Fecha de Ingreso: junio-2009
Mensajes: 30
Antigüedad: 14 años, 9 meses
Puntos: 4
Sonrisa [Solucionado] Funcion substr() da problemas.

Hola amigos, estoy diseñando un pequeño algoritmo para encripar texto raso y al usar la funcion substr() en parte del proceso recibo caracteres como la ñ y los acentos partidos, por ejemplo si tenemos esto:

Código PHP:
$cadena "abcdef"$i 0;
while (
substr($cadena,$i,1)) {
printf("Char: %s \n",substr($cadena,$i,1));
$i++;

Devuelve:
Código:
Char: a 
Char: b 
Char: c 
Char: d 
Char: e 
Char: f
Con la cadena 'abcdef' funciona bastante bien, por que de la 'a' a la 'e' todos los caracteres ocupan 1 byte, sin embargo si usamos un carácter como la ñ o acentos obtenemos esto:

Suponiendo $cadena = "abcñdef";

Código:
Char: a 
Char: b 
Char: c 
Char: � 
Char: � 
Char: d 
Char: e 
Char: f
Se que tiene algo que ver que ese tipo de caracteres ocupan 2 bytes en vez de 1 byte ¿alguien tuvo este problema alguna vez? ¿como se puede solucionar?

Por cierto si alguien conoce algún programa para reventar códigos o desencryptar texto por fuerza bruta me gustaría probar la eficacia del algoritmo, o bien me indicais si conoceis algun programa o probar a ver si podeis ver que pone aqui:

Código:
HvFeEoQO9Y29CL7hAXrQAzAcO,H.25OSGg1;5PFf9fTJQNj4GO2á:9YcQ4eLkJ0tjvPfnudMc;Yr
Es muy sencillo no usa demasiadas variables, el texto dice algo acerca de un mamífero que hace algo en algún continente (para que veáis que no quiero saber la contraseña de ningún sitio ni nada similar)

Gracias por todo, un saludo.

Última edición por anf; 27/07/2009 a las 08:25 Razón: Solución al problema.
  #2 (permalink)  
Antiguo 27/07/2009, 07:44
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Funcion substr() da problemas.

Prueba poniendo arriba del todo

Código php:
Ver original
  1. header("Content-Type: text/html; charset=ISO-8859-1");
  2. // o
  3. header("Content-Type: text/html; charset=utf-8");
  #3 (permalink)  
Antiguo 27/07/2009, 07:52
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Funcion substr() da problemas.

Tienes que utilizar las funciones por la codifica UTF8
Código PHP:
$cadena "abcñef"
$i 0;
while (
mb_substr($cadena,$i,1,'UTF-8')) {
  
printf("Char: %s \n",mb_substr($cadena,$i,1,'UTF-8'));
  
$i++;

Ciao!
  #4 (permalink)  
Antiguo 27/07/2009, 07:55
Avatar de anf
anf
 
Fecha de Ingreso: junio-2009
Mensajes: 30
Antigüedad: 14 años, 9 meses
Puntos: 4
Respuesta: Funcion substr() da problemas.

Cita:
Iniciado por machoman112233 Ver Mensaje
Prueba poniendo arriba del todo

Código php:
Ver original
  1. header("Content-Type: text/html; charset=ISO-8859-1");
  2. // o
  3. header("Content-Type: text/html; charset=utf-8");
No funciona cambiando el Encoding de la página, también he probado mb_substr() e incluso usando php -f archivo.php (de este modo sale aun peor), el problema está en que los caracteres ocupan 2bytes y el substr corta solo 1byte, ni con iso-8859-1 ni 15 ni utf-8, nada, ni siquiera como ansi.
  #5 (permalink)  
Antiguo 27/07/2009, 07:57
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Funcion substr() da problemas.

Pues a mi esto funciona muy bien:
Código PHP:
$cadena "abcñef"
$i 0;
while (
mb_substr($cadena,$i,1,'UTF-8')) {
  
printf("Char: %s \n",mb_substr($cadena,$i,1,'UTF-8'));
  
$i++;

A lo mejor tienes que hacer las dos cosas, efectivaente yo tambien tengo la pagina codificata con utf-8

PS mb quiere decir exactamente multibyte
  #6 (permalink)  
Antiguo 27/07/2009, 08:26
Avatar de anf
anf
 
Fecha de Ingreso: junio-2009
Mensajes: 30
Antigüedad: 14 años, 9 meses
Puntos: 4
Respuesta: Funcion substr() da problemas.

Cita:
Iniciado por abidibo Ver Mensaje
Pues a mi esto funciona muy bien:
Código PHP:
$cadena "abcñef"
$i 0;
while (
mb_substr($cadena,$i,1,'UTF-8')) {
  
printf("Char: %s \n",mb_substr($cadena,$i,1,'UTF-8'));
  
$i++;

A lo mejor tienes que hacer las dos cosas, efectivaente yo tambien tengo la pagina codificata con utf-8

PS mb quiere decir exactamente multibyte
Escribía el mensaje mientras tu contestabas tu respuesta, es cierto, se que mb_ es para funciones que admiten multibyte, lo que no percibí es que como estoy con todo el proyecto en utf-8 supuse que mb_substr asumiría por defecto el encoding en utf-8 cuando en realidad no es así, si no especifico como pones "UTF-8" no realiza bien el mb_substr.

Muchas gracias, casi siempre es el detalle mas tonto es que te estropea todo el código.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:11.