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:
-- 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.
<style>
h3{color:blue;}
</style>
<?php
error_reporting(E_ALL ^ E_NOTICE);
//conexion a db
$conexion = mysql_connect('localhost','root','usbw');
$db= mysql_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é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);
}
?>
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();
}
?>
¿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...
if($palabra == ''){
Utiliza Isset o empty...
http://es1.php.net/manual/es/function.empty.php
http://es1.php.net/isset
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.
if(isset($palabra) && strlen($palabra)>0){/* Código bla ba bla */}else{echo "Campo vacio";}