Ayuda para traductor, hecho en php y mysql.

Iniciado por gigamurki, 13 Diciembre 2013, 18:36 PM

0 Miembros y 1 Visitante están viendo este tema.

gigamurki

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 (sql) [Seleccionar]


-- phpMyAdmin SQL Dump
-- version 4.0.4.2
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 13-12-2013 a las 05:38:47
-- Versión del servidor: 5.6.13
-- Versión de PHP: 5.4.17

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de datos: `dbtra`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `words`
--

CREATE TABLE IF NOT EXISTS `words` (
 `elregistro_id` int(11) NOT NULL AUTO_INCREMENT,
 `traduccion` text NOT NULL,
 PRIMARY KEY (`elregistro_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

--
-- Volcado de datos para la tabla `words`
--

INSERT INTO `words` (`elregistro_id`, `traduccion`) VALUES
(1, 'Plátano = Huwa'),
(2, 'Naranja = Aranxax'),
(3, 'Papaya = U'tun'),
(4, 'Anona = Kewexa'),
(5, 'Nance = Tapa'),
(6, 'Guayaba = Turu'x');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;






Aquí el Codigo php.


Código (php) [Seleccionar]



<style>
h3{color:blue;}
</style>
<?php
error_reporting
(E_ALL E_NOTICE);
//conexion a db
$conexion mysql_connect('localhost','root','usbw');
$dbmysql_select_db('dbtra',$conexion);







$palabra $_GET['variable'];
if(
$palabra == ''){
echo 'No ha escrito ninguna palabra.';
}else{
$query "SELECT elregistro_id, traduccion FROM words where traduccion like '%$palabra%'";
$resultado mysql_query ($query) or die(mysql_error());
if (
mysql_fetch_assoc ($resultado)<=0) {

echo 
"No se encontraron resultados del t&eacute;rmino. ".'<b>'.$palabra.'<b>'.".";
}else {




$resultado mysql_query ($query) or die(mysql_error());
while(
$row mysql_fetch_array($resultado))
{
echo '<p>';

echo $row['traduccion'];
echo '</p>';
}
}
mysql_free_result($resultado);
}
?>



El mundo es mejor si compartes lo que sabes !

i-node

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();
}
?>

#Aitor

¿Has probado con utf8mb4_spanish_ci? Permite tildes y la 'ñ' a parte de otros caracteres especiales...

También decirte...
CitarAdvertencia

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 (php) [Seleccionar]
if($palabra == ''){

Utiliza  Isset o empty...

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

Código (php) [Seleccionar]
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 (php) [Seleccionar]

if(isset($palabra) && strlen($palabra)>0){/* Código bla ba bla */}else{echo "Campo vacio";}
Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}