Autor Tema: Ejercicio PHP CU00821B codificación caracteres no muestra acentos tildes substr  (Leído 9140 veces)

Elanti

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
Hola a todos:

La letra del ejercicio es la siguiente:
Citar
EJERCICIO

Crea el código PHP que cumpla con lo que se indica a continuación:

a) Declara una variable cuyo contenido sea la cadena "Didáctica y divulgación de la programación"

b) Usando la función substr extrae cada una de las palabras de la cadena anterior a una variable. Como tenemos 6 palabras, debes tener 6 variables con las subcadenas.

c) Usando la concatenación muestra por pantalla lo siguiente: <<Las palabras primera, tercera y sexta son: Didáctica, divulgación, programación>>

d) Usando strlen muestra por pantalla lo siguiente: <<La palabra primera es Didáctica y tiene 9 caracteres, la palabra tercera es divulgación y tiene 11 caracteres. La palabra sexta es programación y tiene 12 caracteres>>   

Y mi código:

Código: [Seleccionar]
<meta charset="UTF-8">
<?php 
$frase 
"Didáctica y divulgación de la programación";
$did substr($frase,0,9);
$y substr($frase,10,1);
$div substr($frase,12,11);
$de substr($frase,24,2);
$la substr($frase,27,2);
$pro substr($frase,30,12);
echo 
"Las palabras primera, tercera y sexta son: $did$div$pro <br/>";
echo 
"La palabra primera es $did y tiene ";
echo 
strlen($did);
echo 
" caracteres, la palabra tercera es $div y tiene ";
echo 
strlen($div);
echo 
" caracteres. La palabra sexta es $pro y tiene ";
echo 
strlen($pro);
echo 
" caracteres";
?>

A pesar de que tuve la precaución de incluir el <meta charset="UTF-8"> como lo hago siempre en HTML (aunque no sé si es lo apropiado en este caso), y a pesar de que tengo el Notepad++ configurado en UTF-8 sin BOM, no he conseguido que la letra "o" con acento se visualice bien (aunque sí se visualiza bien la "a" con acento). Me aparece en su lugar un signo de interrogación dentro de un rombo negro, y creo que esto también me está afectando el conteo de caracteres para las funciones substr() y strlen().  ¿Cómo lo soluciono?

Gracias.
« Última modificación: 19 de Agosto 2015, 21:47 por César Krall »

SamML

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 18
    • Ver Perfil
Re:Ejercicio php CU00821B . Dificultades con codificación de caracteres
« Respuesta #1 en: 17 de Agosto 2015, 01:23 »
Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>

</head>
<body>
<?php 


$frase 
"Didáctica y divulgación de la programación";
$did substr($frase,0,10);

$div substr($frase,13,12);

$pro substr($frase,-13);
echo 
"Las palabras primera, tercera y sexta son: $did$div$pro <br/>";
echo 
"La palabra primera es $did y tiene ";
echo 
strlen($did)-1;
echo 
" caracteres, la palabra tercera es $div y tiene ";
echo 
strlen($div)-1;
echo 
" caracteres. La palabra sexta es $pro y tiene ";
echo 
strlen($pro)-1;
echo 
" caracteres";
?>

</body>
</html>

Los caracteres especiales y acentuados utilizan 2 posiciones del array que compone el string y por eso te daba fallo y no entiendes porque esta fallando si las longitudes que aplicas están bien.
Imagínate que cuando es un carácter especial o acentuado suma 2 en vez de 1 sería algo así:
Código: [Seleccionar]
0   1  2  3       4       5
[C, O, J, O, (acentuada), N]

PD: Sublime Text >> Notepad ++ :D
« Última modificación: 17 de Agosto 2015, 01:28 por SamML »

Elanti

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
Bueno, gracias… aunque sigo sin saber cómo solucionar el problema, para que la "ó" se visualice bien en pantalla…

GonzaH

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
  • SMFPersonal
    • Ver Perfil
    • SMFPersonal
Hola, deja así el código

Código: [Seleccionar]
<html>
   <head>
      <meta http-equiv="Content-type" content="text/html;charset=UFT-8">
   </head>
<body>
<?php 
$frase 
"Didáctica y divulgación de la programación";
$did substr($frase0,10);
$y substr($frase10,12);
$div substr($frase12,12);
$de substr($frase,24,2);
$la substr($frase,27,2);
$pro substr($frase,31,40);
echo 
"Las palabras primera, tercera y sexta son: $did$div$pro <br/>";
echo 
"La palabra primera es $did y tiene ";
echo 
strlen($did);
echo 
" caracteres, la palabra tercera es $div y tiene ";
echo 
strlen($div);
echo 
" caracteres. La palabra sexta es $pro y tiene ";
echo 
strlen($pro);
echo 
" caracteres";
echo 
"<br />";
echo 
$frase;
?>

</body>
</html>

¡Saludos!

Elanti

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
No, con esa declaración es aún peor, porque me genera problemas también con la "a" acentuada, y no sólo con la "o".
He estado buscando en internet la solución a mi problema y no la he encontrado por el momento. Estoy practicando tanto en local como en remoto, y en los dos servidores tengo el mismo problema. He revisado la configuración de mi servidor local, y aparentemente está todo correcto.
Lo curioso es que el problema se me manifiesta exclusivamente con PHP. Los archivos HTML se me muestran correctamente con sus caracteres acentuados, tanto en el servidor local como en el remoto.

SamML

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 18
    • Ver Perfil
Compañero, no es un problema de formato o de que no pueda mostrar caracteres acentuados si no un problema en el entendimiento de un string en si y el metodo substr. Tienes que ver los strings como si se trataran de un array, porque lo son internamente.
Y como te digo un caracter especial ocupa 2 posiciones de dicho array, y no una.

No obstante el código que te puse funciona bien, si no entiendes algo de ahí podemos comentarlo.

Como te dije un caracter con tilde ocupa dos posiciones, no una. Si mi cadena es simplemente.

cadena = "ó"

Y quiero mostrarla por el metodo substr haré, substr(0,2) no substr(0,1).

Si entiendes los metodos de codificación de caracteres te explico que tiene que ver en el tamaño de bytes que utiliza para almacenarl. Si un caracter normal ocupa 4 bytes un caracter acentuado ocupa 8 bytes, por ejemplo. Por eso te muestra el signo de interrogacion porque tomarias solo 4 bytes de tu letra con tilde que ocupa 8 y eso decodificado no sabe lo que es.

Saludos

Elanti

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
SamML:
Acabo de probar tu código en mi servidor local, y ¡funciona perfectamente!
Ahora me tengo que ir, pero luego voy a tratar de ver por qué tu código funciona y el mío no.
¡¡Gracias!!

Elanti

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
Indudablemente, tengo que agradecerle a SamML que me haya sacado de este atolladero.
Con el mayor de los respetos, y a manera de crítica constructiva, tengo que decir que lo que él me enseñó no está explicado en el texto, y sin esos conocimientos era imposible resolver el ejercicio. Otras personas que tengan el mismo problema en el futuro, podrán leer este hilo. En mi caso, la aparición de esos caracteres extraños me hizo pensar en algún problema de codificación de caracteres, y me llevó a revisar los archivos de configuración de los servidores y buscar soluciones para un problema inexistente. Cosas de la vida.
¡Saludos!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".