Ver Mensaje Individual
  #12 (permalink)  
Antiguo 13/02/2012, 16:52
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: strtolower y mb_strtolower operan distinto en diferentes servidores

Eso es porque strtolower no soporta cadenas unicode (UTF8) por eso se recomienda el uso de mb_strtolower, por ejemplo este script sencillo, codificado como ANSI:
Código PHP:
Ver original
  1. <?php
  2. header('Content-type: text/html; charset=iso-8859-1');
  3. $str = setlocale(LC_ALL, 'es_MX', 'esp_mex');
  4. ?>
  5. <html>
  6. <head>
  7. <meta name="Content-type" content="text/html; charset=iso-8859-1">
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  9. </head>
  10. <body>
  11. <?php
  12. $str = 'EsTOEsUÑAPruebaAcentosÁÉÍÓÚ';
  13. echo "Original: $str<br />";
  14. echo 'LowerCased: ' . strtolower($str) . '<br />';
  15. ?>
  16. </body>
  17. </html>

Funciona correctamente ej:
Cita:
Original: EsTOEsUÑAPruebaAcentosÁÉÍÓÚ
LowerCased: estoesuñapruebaacentosáéíóú
Sin embargo si lo haces en un script codificado como UTF-8:
Código PHP:
Ver original
  1. <?php
  2. header('Content-type: text/html; charset=utf-8');
  3. $str = setlocale(LC_ALL, 'es_MX', 'esp_mex');
  4. ?>
  5. <html>
  6. <head>
  7. <meta name="Content-type" content="text/html; charset=utf-8">
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  9. </head>
  10. <body>
  11. <?php
  12. $str = 'EsTOEsUÑAPruebaAcentosÁÉÍÓÚ';
  13. echo "Original: $str<br />";
  14. echo 'LowerCased: ' . strtolower($str) . '<br />';
  15. echo 'LowerCased: ' . mb_strtolower($str) . '<br />';
  16. ?>
  17. </body>
  18. </html>

La salida:
Cita:
Original: EsTOEsUÑAPruebaAcentosÁÉÍÓÚ
LowerCased: estoesu�apruebaacentos�����
LowerCased: estoesuñapruebaacentosáéíóú
¿Solución? Decide bien que juego de carácteres vas a ocupar, por ejemplo, si va a ser UTF-8 checa que tengas todo el soporte, de lo contrario regresa a iso-8859-1, y asegurate que todo, tus archivos, documentos html y bdd se comuniquen con el mismo charset.

Saludos.