PHP Y LOS TEXTOS EN ESPAÑOL

El lenguaje PHP no gestiona bien los caracteres con tilde que usamos en español (castellano).
Me refiero a los caracteres á é í ó ú Á É Í Ó Ú. Y también por extensión a ñ Ñ y otros similares.


Por ejemplo, la funcion stripos($pajar,$aguja) debería buscar la aguja en el pajar ignorando mayúsculas y minúsculas. Y efectivamente lo hace, pero con los caracteres ordinarios del idioma inglés, que no incluyen los caracteres españoles.

Así que la línea
$pos=stripos($pajar,$aguja);
no funciona cuando el pajar y la aguja contienen caracteres españoles.

La primera idea para adaptar el código al español podría ser
$pos=stripos(strtolower($pajar),strtolower($aguja));
pero esto sigue fallando, porque la función strtolower() no convierte a minúsculas los caracteres españoles. Tampoco la función strtoupper() convierte a mayúsculas el texto en español.

Hay mucha documentación de PHP que remite al uso de una declaración del idioma en uso para estas funciones. Dice que se incluya una línea con el contenido siguiente:
setlocale(LC_ALL,"es_ES");
Bien, ésto sencillamente no funciona: ver http://www.rojasdelgado.com/kkk/setlocale

así que finalmente la solución pasa por currárselo uno mismo:

function SINTILDES($texto)
{
     $r=$texto;
     $listatildes = array(
           'a' => array('á','à','â','ä'),
           'e' => array('é','è','ê','ë'),
           'i' => array('í','ì','î','ï'),
           'o' => array('ó','ò','ô','ö'),
           'u' => array('ú','ù','û','ü'),
           'A' => array('Á','À','Â','Ä'),
           'E' => array('É','È','Ê','Ë'),
           'I' => array('Í','Ì','Î','Ï'),
           'O' => array('Ó','Ò','Ô','Ö'),
           'U' => array('Ú','Ù','Û','Ü')
     );
     foreach($listatildes as $sintilde=>$contilde)
     {
          $r = str_replace($contilde,$sintilde, $r);
     }
     return $r;
}

function MAYUSCULAS($texto)
{
     $r=$texto;
     $listacambios = array(
          'Á' => 'á',
          'É' => 'é',
          'Í' => 'í',
          'Ó' => 'ó',
          'Ú' => 'ú',
          'Ñ' => 'ñ'
     );
     foreach($listacambios as $mayusculas=>$minusculas)
     {
          $r = str_replace($minusculas,$mayusculas, $r);
     }
     return strtoupper($r);
}

function MINUSCULAS($texto)
{
     $r=$texto;
     $listacambios = array(
          'Á' => 'á',
          'É' => 'é',
          'Í' => 'í',
          'Ó' => 'ó',
          'Ú' => 'ú',
          'Ñ' => 'ñ'
      );
      foreach($listacambios as $mayusculas=>$minusculas)
      {
          $r = str_replace($mayusculas,$minusculas, $r);
      }
      return strtolower($r);
}






blog - PHP Y LOS TEXTOS EN ESPAÑOL - - -SUSCRIPCIONES - - -http://www.rojasdelgado.com