Comunidad de diseño web y desarrollo en internet online

Esto es normal (MYSQL)

Citar            
MensajeEscrito el 10 Dic 2013 03:20 am

Cada vez que guardo un registro, las tildes entre otros caracteres especiales me los convierte así. tengo un motor de búsqueda automático que cuando digito Hola y si en la base de datos dice H..la con caracteres similares no lo reconoce

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 10 Dic 2013 03:44 pm
El cotejamiento de la tabla no coincide con la codificación de caracteres que estás guardando. Seguramente tienes la tabla en Latin1 cuando debería ser UTF-8 (utf8_general_ci).

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 10 Dic 2013 07:12 pm
:O si tienes razon, ahora eso quiere decir que en cada tabla tengo que cambiar eso verdad?

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 11 Dic 2013 12:08 am
Pues sí. Si quieres hacer las cosas bien, absolútamente todo debe estar en UTF-8.
Esto es lo que debes verificar:
En MySQL.
- Cotejamiento de los campos de las tablas.
- Cotejamiento de las tablas.
- Cotejamiento de la base de datos.
- Cotejamiento de la conexión de la base de datos.
En PHP.
- Asegurarte que el driver de MySQL se comunique con el motor de base de datos en UTF-8, para ello inmediatamente después de establecer la conexión y seleccionar la base de datos, ejecutar la sentencia SQL "SET NAMES 'utf8'".
- Debes usar las funciones para tratamiento de cadenas UTF8 (son las funciones que comienzan con mb_ en el nombre, por ejemplo: mb_strlen.
- Los archivos de código fuente debes convertirlos y luego usar siempre la codificación "UTF8 sin BOM". No solo los .php, también los .htm, .css y .js; y cualquier otro archivo de texto que uses debe estar en "UTF8 sin BOM" (tu editor de texto debe soportar esto, si no lo hace, consigue un editor de texto que sí lo haga, por ejemplo Notepad++).
En Apache:
Asegúrate que el servidor trabaje en UTF8. En el .htaccess puedes poner:

Código :

AddDefaultCharset utf-8

En los códigos HTML debes poner que el charset a usar el UTF8 especificando el tag <meta> correcto:

Código HTML :

<meta charset="UTF-8">

En el navegador asegúrate que lo está tomando correctamente. Ya que usar Chrome, haz opciones->herramientas->codificación, del menú que aparece debe estar seleccionado Unicode UTF8, si no lo está, es que el servidor no está sirviendo correctamente la codificación.
Si a pesar que has puesto el <meta> correcto y la directiva en el .htaccess, puedes forzar la cabecera desde PHP con:

Código PHP :

header("Content-type: text/html; charset=UTF-8");

Si esto parece un poco paranoico, es que debes serlo porque si alguna de estas cosas falla, comenzarás a tener "caracteres extraños" en la base de datos.

Cualquier cosa, me preguntas y con gusto te ayudo ;)

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 11 Dic 2013 03:49 am
Gracias DriverOp :D mira he echo lo que me dijiste:
En la base de datos lo he puesto asi:

en el index asi:

En mi archivo de funciones incluido dentro del index asi:

Y en mi htaccess asi:


Pero ahorita acabo de cambiar un registro que estaba con "í" le puse "i" y luedo otra vez "í" mire la base de datos y salio ese carácter feo :/

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 11 Dic 2013 12:06 pm
¿Y la conexión a la base de datos también es UTF8?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 12 Dic 2013 02:31 am
Te refieres a esto?

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 12 Dic 2013 02:11 pm
Después de corroborar que la conexión a la base de datos se realizó exitósamente ejecutar "SET NAMES 'UTF8'", como menciono en un mensaje anterior....

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 14 Dic 2013 07:34 am
ahora si faltaba eso :D pucha ahora tengo que editar uno por uno? u.u

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 14 Dic 2013 09:06 am
Mira http://goo.gl/3sl7Av si pasas el mouse por las películas sale un triangulo raro con un signo de ? pero cuando veo la base de datos me sale todo perfecto

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 16 Dic 2013 11:18 pm
Hola
¿Los pop-ups los manejas en la misma página/archivo?
Si es en otro, pues asegúrate de la etiqueta <meta> que establece el charset, este puesta.

Es que yo he realizado nomás aplicaciones web, donde todo lo he configurado con utf-8 en cada aplicación, además de aplicar los pasos que DriverOp dice que son "paranoicos", entonces no se donde esté el problema... pero ya falta poco ;)

Revisa que página es la que está sin modificar el charset, o si el origen de la información de los pop-ups está en otra carpeta que no cubre el .htaccess (si puedes modificar el httpd.conf del apache sería ideal, pero dudo que el admin del server quiera meterle mano a eso)

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

firefox
Citar            
MensajeEscrito el 17 Dic 2013 07:02 pm
Ya probé metiendole un htaccess con el código a la carpeta donde esta el archivo, es una pagina que se encuentra en mi carpeta include y es llamada por un método javascript

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 17 Dic 2013 07:39 pm
Es que el rombo con el interrogante, también aparece por la codificación. ¿Revisaste que el script PHP con el que traes la info desde la base de datos tenga el comando de MySQL "SET NAMES UTF-8"? (el del pop-up)

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

firefox
Citar            
MensajeEscrito el 17 Dic 2013 08:06 pm
El código java que trae la pagina esta es el siguiente:

Código Javascript :

$(document).ready(function() {

   var track_click = 0; //track user click on "load more" button, righ now it is 0 click
   
   var total_pages = <?php echo $total_pages; ?>;
   $('#peliculas').load("include/movie.php", {'page':track_click}, function() {track_click++;}); //initial data to load

   $(".cargar_peliculas").click(function (e) { //user clicks on button
   
      $(this).hide(); //hide load more button on click
      $('.animation_image').show(); //show loading image

      if(track_click <= total_pages) //make sure user clicks are still less than total pages
      {
         //post page number and load returned data into result element
         $.post('include/movie.php',{'page': track_click}, function(data) {
         
            $(".cargar_peliculas").show(); //bring back load more button
            
            $("#peliculas").append(data); //append data received from server
            
            //scroll page to button element
            $("html, body").animate({scrollTop: $("#cargar_peliculas_button").offset().top}, 500);
            
            //hide loading image
            $('.animation_image').hide(); //hide loading image once data is received
   
            track_click++; //user click increment on load button
         
         }).fail(function(xhr, ajaxOptions, thrownError) { 
            alert(thrownError); //alert any HTTP error
            $(".cargar_peliculas").show(); //bring back load more button
            $('.animation_image').hide(); //hide loading image once data is received
         });
         
         
         if(track_click >= total_pages-1)
         {
            //reached end of the page yet? disable load button
            $(".cargar_peliculas").attr("disabled", "disabled");
         }
       }
        
      });
});

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 18 Dic 2013 03:29 pm
¿El script "movie.php" tiene el header correcto?. Es decir, debes enviar la cabecera:

Código PHP :

header("Content-type: text/html; charset=UTF-8");

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 18 Dic 2013 05:03 pm
Desconozco un poco de javascript eso es html o java? lo coloco dentro del archivo movie.php o en el script que se encuentra en index.php

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 18 Dic 2013 08:47 pm
Es código PHP (función header). Lo debes poner bien al inicio de los scripts PHP que llamas con Ajax.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 19 Dic 2013 09:21 am
Coloque el codigo en el archivo movie.php como me dijiste:

Pero me sigue saliendo asi:

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 19 Dic 2013 02:50 pm
¿Ejecutas SET NAMES 'utf-8' sobre la base de datos inmediatamente después de establecer la conexión?.

Recuerda: Paranoia. Absolutamente TODO debe estar en UTF8.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 19 Dic 2013 07:23 pm
Si lo coloco asi:

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 19 Dic 2013 07:23 pm
en el código javascript no se coloca nada?

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 20 Dic 2013 12:09 pm
Me parece que para solucionar esto, debería estar en tu máquina revisando tu código, lo siento...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 20 Dic 2013 03:40 pm
Revisa el php.ini y revisa el tratamiento que le hace al texto. Debe decir utf-8

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

chrome
Citar            
MensajeEscrito el 21 Dic 2013 06:24 pm
Se me acaba de ocurrir dónde podría estar el problema.

El texto que debe aparecer en esos pop-ups ¿los estás procesando de alguna manera con PHP?. Si es así, cualquier operación que hagas con esos textos DESPUÉS de leerlos de la base de datos y ANTES de enviarlos al navegador, debes usar las funciones de PHP especiales para UTF-8, de otra forma estarás "planchando" la codificación del texto.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 21 Dic 2013 08:49 pm
Te pasare todo el código, espero no este arriesgando nada poniendo a la vista esto:

Código PHP :

<?php
include("../Connections/conexion.php"); //include config file
header("Content-type: text/html; charset=UTF-8");
//sanitize post value
$page_number = filter_var($_POST["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH);

//throw HTTP error if page number is not valid
if(!is_numeric($page_number)){
   header('HTTP/1.1 500 Invalid page number!');
   exit();
}

//get current starting point of records
$position = ($page_number * $item_per_page);

//Limit our results within a specified range. 
$results = mysqli_query($connecDB,"SELECT * FROM m_movie ORDER BY id DESC LIMIT $position, $item_per_page");
//output results from database
echo '<ul>';
while($row_ListarPeliculas = mysqli_fetch_array($results))
{?>
<li>
<div class="in"></div>
<div class="pop">
   <div class="background" style="background:url(../content/img/peliculas/thumb/<?php echo $row_ListarPeliculas['id']; ?>.jpg) center no-repeat;background-size:100% auto;">
      <div class="shadow"></div>
    </div>
    <div class="datos">
    <div class="poster">
    <img alt="<?php echo $row_ListarPeliculas['titulo']; ?>" src="<?php echo $row_SacarDatos['url']; ?>content/img/peliculas/<?php echo $row_ListarPeliculas['id']; ?>.jpg">
    </div>
    <div>
    <titulo><?php $cortartitulo = $row_ListarPeliculas['titulo'];if ((strlen($cortartitulo))> 31) { $cortartitulo=substr($cortartitulo, 0, 31)."...";}echo $cortartitulo;?></titulo>
    <ano><?php echo $row_ListarPeliculas['ano']?></ano>
    <h2><?php $cortarsinopsis = $row_ListarPeliculas['sinopsis'];if ((strlen($cortarsinopsis))> 268) { $cortarsinopsis=substr($cortarsinopsis, 0, 268)."...";}echo $cortarsinopsis;?></h2>
    <hr>
    </div>
    <ul>
   <reparto><b>Reparto:</b> <?php echo imprimeReparto(repartosacar(reparto($row_ListarPeliculas['id']))); ?></reparto>
    <director><b>Director:</b> <?php echo sacardirector(director($row_ListarPeliculas['id'])); ?></director>
    </ul>
    </div>
</div>
<a href="<?php echo $row_SacarDatos['url']; ?>peliculas/<?php echo $row_ListarPeliculas['id']; ?>/<?php echo limpia_espacios($row_ListarPeliculas['titulo']); ?>">
<img alt="<?php echo $row_ListarPeliculas['titulo']; ?>" src="<?php echo $row_SacarDatos['url']; ?>content/img/peliculas/<?php echo $row_ListarPeliculas['id']; ?>.jpg">
<span class="shadow"></span>
<span class="play">
<div class="title">
<?php $cortarpelicula = $row_ListarPeliculas['titulo'];
if ((strlen($cortarpelicula))> 13) { $cortarpelicula=substr($cortarpelicula, 0, 13)."...";}
echo $cortarpelicula;?>
</div>
</span>
</a>
</li>
<?php } echo '</ul>';?>

Todo esto es mi archivo movie.php

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 22 Dic 2013 05:53 pm
Estás usando substr() cuando deberías usar mb_substr().

Llamas a una función "limpia_espacios()" que seguramente tampoco estás usando las funciones mb_...

Otra recomendación. Antes del include() que tienes al inicio del script, ejecuta:

Código PHP :

mb_internal_encoding("UTF-8");

Para que PHP cambie su codificación independientemente de lo que diga el php.ini

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 23 Dic 2013 01:07 am
Esta es mi funcion limpiaespacios()

Código PHP :

function limpia_espacios($cadena){
    $cadena = str_replace(' ', '-', $cadena);
    $cadena = str_replace('?', '', $cadena);
    $cadena = str_replace('+', '', $cadena);
    $cadena = str_replace('??', '', $cadena);
    $cadena = str_replace('`', '', $cadena);
   $cadena = str_replace('’', '', $cadena);
    $cadena = str_replace('!', '', $cadena);
    $cadena = str_replace('¿', '', $cadena);
   $cadena = str_replace('"', '', $cadena);
   $cadena = str_replace('.', '', $cadena);
   $cadena = str_replace(',', '', $cadena);
   $cadena = str_replace(':', '', $cadena);
   $cadena = str_replace("'", '', $cadena);
   $cadena = str_replace('&', 'and', $cadena);
   $cadena = str_replace('á', 'a', $cadena);
   $cadena = str_replace('à', 'a', $cadena);
   $cadena = str_replace('Á', 'a', $cadena);
   $cadena = str_replace('À', 'a', $cadena);
   $cadena = str_replace('ä', 'a', $cadena);
   $cadena = str_replace('Ä', 'a', $cadena);
   $cadena = str_replace('é', 'e', $cadena);
   $cadena = str_replace('É', 'e', $cadena);
   $cadena = str_replace('ë', 'e', $cadena);
   $cadena = str_replace('Ë', 'e', $cadena);
   $cadena = str_replace('í', 'i', $cadena);
   $cadena = str_replace('Í', 'i', $cadena);
   $cadena = str_replace('ï', 'i', $cadena);
   $cadena = str_replace('Ï', 'i', $cadena);
   $cadena = str_replace('ó', 'o', $cadena);
   $cadena = str_replace('Ó', 'o', $cadena);
   $cadena = str_replace('ö', 'o', $cadena);
   $cadena = str_replace('Ö', 'o', $cadena);
   $cadena = str_replace('ú', 'u', $cadena);
   $cadena = str_replace('Ú', 'u', $cadena);
   $cadena = str_replace('ü', 'u', $cadena);
   $cadena = str_replace('Ü', 'u', $cadena);
    $cadena = strtolower($cadena);
   
    return utf8_encode($cadena);
 
}

He cambiado como dijiste todo los substr() por mb_substr() he colocado el codigo que me dices al inicio del archivo movie.php

pero me siguen saliendo los malditos rombos :'(

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome
Citar            
MensajeEscrito el 23 Dic 2013 12:15 pm
¿Y por qué tienes que hacer esos reemplazos?. ¿Y por qué tienes que recodificar la cadena a UTF-8?. No le veo el sentido a nada de esto.

Y no es solo substr, son TODAS LAS FUNCIONES DE TRATAMIENTO DE CADENAS. Tres veces te he referido a la lista de funciones que tienes que reemplazar.

Suerte con esto :)

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 23 Dic 2013 04:17 pm
YO opino que en ves de "encoding" seria "decoding"

En fin no esperes respuestas faciles, lo que puedes hacer es hacer una consulta en un archivo aparte.

cre auna nueva pagina HTML 5 con utf-8.. has una ocnsulta simple como "SELECT ¨FROM tabla".

y solo aplica el print_r($arreglodeResultados); para ver que imprime... si ahi imprime los rombos.. significa que los datos ya vienen asi de la base de datos.

aplica un

utf8_decode(print_r($arreglodeResultados));


y yap si ya no te manda los rombos ya estas del otro lado.

Por elporfirio

Claber

652 de clabLevel

1 tutorial

Genero:Masculino  

FullStack Web Developer

firefox
Citar            
MensajeEscrito el 24 Dic 2013 08:21 pm
Porfirio en decoding te refieres al código que coloque al inicio del archivo? creo que no lo reconoce existe el mb_internal_decoding("UTF-8"); ? o te refieres a la funcion

Por miguelsirna

315 de clabLevel



Genero:Masculino  

Hacker & Programmer

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.