Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: tecasoft en 21 Febrero 2013, 21:52 PM

Título: problema con la ñ
Publicado por: tecasoft en 21 Febrero 2013, 21:52 PM
como puedo hacer funcionar la maldita ñ, he leido multitud de manuales y no me va, tampoco en el hosting que tengo asi que es problema de algo pero nose, me salen interrogantes y sino otros simbolos desconocidos nunca las ñ. alguna solucion coherente¿¿? muchas gracias de antemano


<?php

$str 
"ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz1234567890";

$cad "";
for(
$i=0;$i<12;$i++) {
$cad .= substr($str,rand(0,62),1);
}

print 
$cad;
?>

Título: Re: problema con la ñ
Publicado por: #!drvy en 21 Febrero 2013, 22:13 PM
Siempre que uses funciones que manejan caracteres "extraños", intenta utilizar un encoding UTF-8.

Código (php,5) [Seleccionar]
$str = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz1234567890";

$cad = "";
for($i=0;$i<12;$i++) {
$cad .= mb_substr($str,rand(0,62),1,'UTF-8');
}

echo $cad;
?>


PD: Si solo vas a mostrar un texto, utiliza ECHO en vez de PRINT. PRINT es algo mas lento que ECHO porque admite funciones y otros parámetros. No merece la pena utilizarlo si solo vas a mostrar texto.

Saludos
Título: Re: problema con la ñ
Publicado por: tecasoft en 21 Febrero 2013, 22:39 PM
ok gracias brother y para otros casos que harias? no seria mejor setlocale(LC_ALL, "es_ES.utf8");? aunque no me funciona lo digo para codear una web entera y no tenga que ir mirando funcion x funcion y cambiando lo del utf-8 en cada paso¿?
Título: Re: problema con la ñ
Publicado por: #!drvy en 21 Febrero 2013, 22:57 PM
Según se, caracteres como la Ñ o Ç son multibytes. Por defecto, funciones como substr no manejan caracteres multibyte y por eso falla. Por tanto, según se, la única solución es añadir mb_ delante para que puedan manejar dichos caracteres.

Puedes facilitarte la tarea declarando al principio del php
Código (php) [Seleccionar]
mb_internal_encoding("UTF-8");
mb_substr($str,rand(0,62),1);


Pero tendras que cambiar todas las funciones que manejan string a mb_.
http://www.php.net/manual/en/ref.mbstring.php

Saludos
Título: Re: problema con la ñ
Publicado por: tecasoft en 21 Febrero 2013, 23:12 PM
aqui no me funciona el mb_'etc' deberia saltar el "echo" pero me salta "Contiene caracteres no permitidos" e estado googleando y encontrado poca informacion al respecto, podria ser del php.ini en concreto en "mbstring"¿?:


<?php
mb_internal_encoding
("UTF-8");
session_start();

if(!isset(
$_SESSION['usuario1']))
{

$usuario=$_POST['usuario'];
$pass=$_POST['contrasena'];


if (
strlen($usuario)<|| strlen($usuario)>15)
{
      echo  
"El usuario esta entre 8 y 15 caracteres<br>";      
      return 
false;
   }

if (
strlen($pass)<|| strlen($pass)>15)
{
      echo  
"La contraseña esta entre 8 y 15 caracteres<br>";      
      return 
false;
   }

//es mejor hacer una lista blanca con caracteres permitidos que una negra, lo que no este aquí simplemente se ignora
   
$validos "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789-_@#";
   for (
$i=0$imb_strlen($usuario,'UTF-8'); $i++){
      if (
mb_strpos($validosmb_substr($usuario,$i,1,'UTF-8'),'','UTF-8')===false){
         echo  
" Contiene caracteres no permitidos<br>";
                                    return 
false;  
      }
   }
echo 
$usuario;

?>