Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema reemplazando caracteres especiales

Estas en el tema de Problema reemplazando caracteres especiales en el foro de PHP en Foros del Web. Buenas noches compañeros, les contaré el problema que tengo. Desde hace buen tiempo he venido trabajando con esta función para reemplazar caracteres especiales para guardar/imprimir ...
  #1 (permalink)  
Antiguo 24/09/2013, 23:06
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Problema reemplazando caracteres especiales

Buenas noches compañeros, les contaré el problema que tengo.

Desde hace buen tiempo he venido trabajando con esta función para reemplazar caracteres especiales para guardar/imprimir registros de una base de datos mediante PHP. La funcion es esta:

Código PHP:
function reemplazar_caracteres($string) {
    
$busqueda = array("Á","É","Í","Ó","Ú","Ñ","á","é","í","ó","ú","ñ"," ","(",")","[","]","'",'"',"°","{","}","/",":",",",".",";","¡","!","¿","?","&","%","$","…","“","”","`","ü","|","*","<",">","\\","º","+","#","@","=","·","«","»","^","ç");
    
$reemplazo = array("A","E","I","O","U","N","a","e","i","o","u","n","-","","","","","","","","","","-","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","c");
    return(
str_replace($busqueda$reemplazo$string));

La función venía trabajando perfectamente hasta hoy que he querido usarla en un proyecto nuevo. Si la uso en un archivo simple, funciona perfectamente, pero cuando la quiero usar en un script que uso para guardar datos en mi BD, no funciona. Por ejemplo, si mediante el formulario envío la palabra Informática, sólo guarda Inform en la BD.

Me pasó algo parecido al momento de mostrar datos con caracteres especiales ya guardados con anterioridad, en algunos casos no reemplaza y en otros simplemente imprime este caracter: �

Como repito, cuando ejecuto la función en archivo PHP simple, trabaja perfecto, el problema está a la hora de trabajar con BD. Para añadir, los archivos PHP están codificados en utf-8 y la BD igual, tanto tablas como campos.

¿Alguna idea de lo que puede estar pasando?

Gracias de antemano por la ayuda.
  #2 (permalink)  
Antiguo 25/09/2013, 02:07
 
Fecha de Ingreso: septiembre-2013
Ubicación: Madrid
Mensajes: 10
Antigüedad: 10 años, 7 meses
Puntos: 1
Respuesta: Problema reemplazando caracteres especiales

Se me ocurre que quizás te falte definir la codificación en tu conexión con la base de datos:
mysql_query("SET NAMES utf8");

Aunque tengas los archivos php y la BD codificada en utf8, a lo mejor no lo tienes en el archivo de conexión. Prueba a ver.
  #3 (permalink)  
Antiguo 25/09/2013, 06:49
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema reemplazando caracteres especiales

Para estos casos tenes las funciones utf8_encode() y utf8_decode() para transformar de iso a utf8 y de utf8 a iso respectivamente. Simplemente pasa tu información por la función utf8_encode() antes de guardarla en la base de datos y santo remedio! :)
  #4 (permalink)  
Antiguo 25/09/2013, 08:09
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Problema reemplazando caracteres especiales

Cita:
Iniciado por jolucoes Ver Mensaje
Se me ocurre que quizás te falte definir la codificación en tu conexión con la base de datos:
mysql_query("SET NAMES utf8");

Aunque tengas los archivos php y la BD codificada en utf8, a lo mejor no lo tienes en el archivo de conexión. Prueba a ver.
Hola jolucoes, sí tengo seteado el SET NAMES en mi archivo de conexión a MySQL, y también el header() y <meta> respectivo, no sé qué pueda estar pasando :/
  #5 (permalink)  
Antiguo 25/09/2013, 11:13
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Problema reemplazando caracteres especiales

Finalmente solucioné el problema con esta otra función:

Código PHP:
function slugify($text) {
    
// replace non letter or digits by -
    
$text preg_replace('~[^\\pL\d]+~u''-'$text);
 
    
// trim
    
$text trim($text'-');
 
    
// transliterate
    
if (function_exists('iconv')) {
        
$text iconv('utf-8''us-ascii//TRANSLIT'$text);
    }

    
// lowercase
    
$text strtolower($text);
 
    
// remove unwanted characters
    
$text preg_replace('~[^-\w]+~'''$text);
 
    if (empty(
$text)) {
        return 
'n-a';
    }     
    return 
$text;

Ahí se las dejo por si le pueda servir a alguien.

Saludos.

Etiquetas: caracteres, especiales, formulario, registro, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:30.