Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Elanti en 16 de Agosto 2015, 22:52
-
Hola a todos:
La letra del ejercicio es la siguiente:
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:
<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.
-
<!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í:
0 1 2 3 4 5
[C, O, J, O, (acentuada), N]
PD: Sublime Text >> Notepad ++ :D
-
Bueno, gracias… aunque sigo sin saber cómo solucionar el problema, para que la "ó" se visualice bien en pantalla…
-
Hola, deja así el código
<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($frase, 0,10);
$y = substr($frase, 10,12);
$div = substr($frase, 12,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!
-
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.
-
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
-
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!!
-
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!