Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: gigamurki en 13 Diciembre 2013, 18:36 pm



Título: Ayuda para traductor, hecho en php y mysql.
Publicado por: gigamurki en 13 Diciembre 2013, 18:36 pm
Hola Programadores y desarrolladores web, bueno pues paso por aquí solicitando su ayuda, para que me ayuden a resolver este pequeño problema que tengo con php y mysql.

Bueno voy al grano, estoy haciendo un traductor de palabras Español-Maya y viceversa, pero el problema es que en los cotejamientos que elijo en la base de datos mysql no me dan los resultados que deseo, por ejemplo en la base de datos tengo una tabla con una lista de palabras que utilizan los siguientes caracteres.

Caracteres:  Ĥ ř Ű Ϋ Ũ Œ ē Ü
Palabras:
Plátano = Huwa
Naranja = Aranxax
Papaya = U’tun'
 Anona = Kewexa
Nance = Tapa
Piojo = Tümalh
Regar = Tz’ümü
Armadillo = k`üso


Bueno y pues cuando en los resultados de la traducción de la pagina php no me muestra las traducciones como debe de ser como por ejemplo en la palabra, “Regar = Tz’ümü” no me la muestra así, si no que de la siguiente manera, “Regar = Tz??m?”.  Y la verdad yo ya probé con varios tipos de cotejamiento como lo es el “utf_generl_ci”   “utf_unicode_ci” .

Sin nada más que decir abajo les dejo el código de la base de datos, y los códigos de la conexión php. Espero su ayuda y gracias por leer.

Aquí el codigo de la base de datos en Mysql:

Código
  1.  
  2. -- phpMyAdmin SQL Dump
  3. -- version 4.0.4.2
  4. -- http://www.phpmyadmin.net
  5. --
  6. -- Servidor: localhost
  7. -- Tiempo de generación: 13-12-2013 a las 05:38:47
  8. -- Versión del servidor: 5.6.13
  9. -- Versión de PHP: 5.4.17
  10.  
  11. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
  12. SET time_zone = "+00:00";
  13.  
  14.  
  15. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  16. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  17. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  18. /*!40101 SET NAMES utf8 */;
  19.  
  20. --
  21. -- Base de datos: `dbtra`
  22. --
  23.  
  24. -- --------------------------------------------------------
  25.  
  26. --
  27. -- Estructura de tabla para la tabla `words`
  28. --
  29.  
  30. CREATE TABLE IF NOT EXISTS `words` (
  31.  `elregistro_id` INT(11) NOT NULL AUTO_INCREMENT,
  32.  `traduccion` text NOT NULL,
  33.  PRIMARY KEY (`elregistro_id`)
  34. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
  35.  
  36. --
  37. -- Volcado de datos para la tabla `words`
  38. --
  39.  
  40. INSERT INTO `words` (`elregistro_id`, `traduccion`) VALUES
  41. (1, 'Plátano = Huwa'),
  42. (2, 'Naranja = Aranxax'),
  43. (3, 'Papaya = U’tun'),
  44. (4, 'Anona = Kewexa'),
  45. (5, 'Nance = Tapa'),
  46. (6, 'Guayaba = Turu’x');
  47.  
  48. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  49. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  50. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
  51.  
  52.  
  53.  



Aquí el Codigo php.


Código
  1.  
  2.  
  3. <style>
  4. h3{color:blue;}
  5. </style>
  6. <?php
  7. error_reporting(E_ALL ^ E_NOTICE);
  8. //conexion a db
  9. $conexion = mysql_connect('localhost','root','usbw');
  10. $db= mysql_select_db('dbtra',$conexion);
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18. $palabra = $_GET['variable'];
  19. if($palabra == ''){
  20. echo 'No ha escrito ninguna palabra.';
  21. }else{
  22. $query = "SELECT elregistro_id, traduccion FROM words where traduccion like '%$palabra%'";
  23. $resultado = mysql_query ($query) or die(mysql_error());
  24. if (mysql_fetch_assoc ($resultado)<=0) {
  25.  
  26. echo "No se encontraron resultados del t&eacute;rmino. ".'<b>'.$palabra.'<b>'.".";
  27. }else {
  28.  
  29.  
  30.  
  31.  
  32. $resultado = mysql_query ($query) or die(mysql_error());
  33. while($row = mysql_fetch_array($resultado))
  34. {
  35. echo '<p>';
  36.  
  37. echo $row['traduccion'];
  38. echo '</p>';
  39. }
  40. }mysql_free_result($resultado);
  41. }
  42. ?>
  43.  
  44.  
  45.  


Título: Re: Ayuda para traductor, hecho en php y mysql.
Publicado por: i-node en 30 Diciembre 2013, 12:32 pm
Deberias especificar el charset a utilizar despues de conectar a la bd mediante la funcion mysql_set_charset.

http://www.php.net/manual/es/function.mysql-set-charset.php

P.D: Como bien dicen en la documentacion de php, ese grupo de funciones estan obsoletas. Deberias utilizar las API MySQLi o PDO.

<?php
try {
    $gbd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', $usuario, $contraseña);
    foreach($gbd->query('SELECT * from FOO') as $fila) {
        print_r($fila);
    }
    $gbd = null;
} catch (PDOException $e) {
    print "¡Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>


Título: Re: Ayuda para traductor, hecho en php y mysql.
Publicado por: #Aitor en 1 Enero 2014, 18:10 pm
¿Has probado con utf8mb4_spanish_ci? Permite tildes y la 'ñ' a parte de otros caracteres especiales...

También decirte...
Citar
Advertencia

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro. En su lugar, deberían usarse las extensiones MySQLi o PDO_MySQL.

Aproposito...
Código
  1. if($palabra == ''){

Utiliza  Isset o empty...

http://es1.php.net/manual/es/function.empty.php
http://es1.php.net/isset

Código
  1. if (!empty($palabra)) {/* Código bla bla bla */}else{echo "Campo vacio";}

Aunque cabe destacar que empty no reconoce variables con valor 0 como definidas. En caso de necesitar dicho valor (0) puedes usar isset.
Código
  1. if(isset($palabra) && strlen($palabra)>0){/* Código bla ba bla */}else{echo "Campo vacio";}