Caracteres especiales en php desde base de datos mysql

Tengo otro problema pequeño.
Con diccionario polaco - español, que estoy haciendo con php y mysql
El problema es el siguiente:
He hecho un formulario que envía variables a php que recoge los datos de base de datos mysql y publica por el archivo.php
Bueno no envío código porque creo que no hace falta.
Es que los datos de base de datos me muestra sin tildes y sin "ñ" y todo esto.
Sin embargo echo "palabra con ñ " me muestra con "ñ" esta bien.
Único que las palabras recogidas de base de datos se muestran sin "ñ"
Si entro a la base de datos por phpmyadmin las palabras en las tablas se muestran con "ñ" y tildes .
No se como explicarme .
Creo que me entiendes.
Si es así por favor envíe me una solución .
Archivo.php contiene :
<META http-equiv=Content-Type content="text/html; charset=iso-8859-2">
Base de datos : utf8
sql latin2
Todo esta bien .
En base de datos se muestra con "ñ" entonces me imagino que esta bien
No tengo ni idea que problema hay .
Si puedes ayuda me

1 respuesta

Respuesta
1
Puesto que la base de datos es utf8, también deberías usar esa codificación en tus páginas.
O sea, que en la cabecera de la página en la que muestres la información debería haber:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Con esto, lo caracteres que están almacenados en codificación utf8 en la base de datos, ser verán correctamente también en la página.
ESTO ES ARCHIVO.PHP
Resultados de la Búsqueda en la Librería Online
<h1>La traduccion español - polaco</h1>
esto son caracteres especiales polacos : idaidaidaidaidaida
$terminobusqueda = trim ($_POST['terminobusqueda']);
$tipobusqueda = trim($_POST['tipobusqueda']);
if (!$tipobusqueda || !$terminobusqueda)
{
echo "No has introducido los detalles de la busqueda. Por favor vuelve e inténtalo de nuevo.";
exit;
}
$tipobusqueda = addslashes($tipobusqueda);
$terminobusqueda = addslashes($terminobusqueda);
@ $db = mysql_pconnect("xxxxxx", "xxxxxxxx", "xxxxxxxxxxx");
if (!$db)
{
echo "Error: No se ha podido conectar a la base de datos. Por favor, prueba de nuevo más tarde.";
exit;
}
mysql_select_db("xxxxxxxxxxxxxxx");
$consulta = "select * from espa_polo where ".$tipobusqueda." like '%".$terminobusqueda."%'";
$resultado = mysql_query($consulta);
$num_resultados = mysql_num_rows($resultado);
Echo "
nr de palabras encontradasidaida: ".$num_resultados."
";
for ($i=0; $i <$num_resultados; $i++)
{
$row = mysql_fetch_array($resultado);
if ($tipobusqueda == "palabra_es") {
echo "
".($i+1).". Palabra Espanola: ";
echo stripslashes($row["palabra_es"]);
echo "

Palbra Polaca: ";
echo stripslashes($row["palabra_pl"]);
echo "
ejemplo: ";
echo stripslashes($row["ejemplo"]);
} else {
echo "
".($i+1).". Slowo polskie to: ";
echo stripslashes($row["palabra_pl"]);
echo "

Tlumaczenie na hiszpenski: ";
echo stripslashes($row["palabra_es"]);
echo "
przyklad: ";
echo stripslashes($row["ejemplo"]);
}
echo "
";
?>
Este archivo con :
Me sale correcto
Pero sin embargo
palabre recogida de : echo stripslashes($row["palabra_pl"]);
¿De campo palabra_pl en en cambio de "ida" me sale id?
En mysql phpmyadmin me sale "ida"
¿Con lo que tu me has dado
todo me sale con?
Es que no puedo enconttrar solución.
Ademas que raro que en phpmyadmin me sale bien y en archivo.php me sale bien
ha echo stripslashes($row["palabra_pl"]); ¿Me sale con?.
Gracias por respuesta
Si el UTF8 te da problemas, cambia el campo de la base de datos donde tengas las palabras en polaco y aplícale el juego de caracteres ucs2_polish_ci aplicando al campo:
CHARACTER SET ucs2 COLLATE ucs2_polish_ci
Lo lógico que que el campo tenga un juego de caracteres y ordenación polacos, si ese es su contenido.
Hola experto.
Muchas gracias por ayudarme .
Es difícil explicarme escribiendo entonces envío un video online en página:
www.aplikacjeweb.com
En menu "PARA EXPERTO"
Así voy a poder explicarme mejor.
Tengo esperanza que después de ver el video vas a saber donde esta error.
"En informática las cosas son fáciles si se sabe "
Casi siempre la respuesta es que se cambia solo una cosa por otra y ya esta .
¿Pero qué es?
Otra vez gracias .
Por más que he buscado, no encuentro en la página que me dices ningún menú 'PARA EXPERTO'. De hecho, la mayor parte de la página parece estar en polaco.
Disculpame, pero tenia puesto el video PARAEXPERTO unos días, y luego lo quite,
porque necesitaba espacio en mi servidor para otro video .
Disculpe otra vez.
Estoy buscando hace varios días y nada,
Ya he enviado pregunta para varios todoexpertos,
A continuación te envío la pregunta:
Hola, que tal.
Tengo un problema y no puedo encontrar la solución, aunque tiene seguro una solución, como todo.
Estoy haciendo un diccionario Polaco - Español.
El codigo html y php y sql para mysql ya tengo mas o menos preparado para trabajar y meter palabras y traducciones,
pero tengo un problema con letras Españolas "ñ, los accentos
y las letras Polacas, " A,C,E L,N,Ó,S,Z; a,c,e,l,n,ó,s,z,z;
El formulario html tiene dos campos : $tipobusqueda y $terminobusqueda.
En $tipobusqueda se elige idioma de traducción ES-PL o PL-ES.
En $terminobusqueda se escribe palabra para traducir.
Pero si se escribe una palabra, por ejemplo: "España" ; o palabra Polaca: "Czesc"
Entonces no emcuentra la palabra en la base de datos mysql.
En la base de datos he hecho un campo para la palabra "españa" y la cambie por "espana" y tampoco cuando pongo españa en el formulario no encuentra en BD.
Si pongo "espa" si que me encuentra en BD.
A contynyacion pongo los godigos enteros:
-------------------------------------------------------------------------------------------------------------------------------------------------------------
"
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8_polish_ci" />
<META http-equiv=Content-Type content="text/html; charset=iso-8859-2">
<META http-equiv=Content-Type content="text/html; charset=utf8">
<title>Untitled Document</title>
</head>
<body>
<div id="Layer1" style="position:absolute; width:510px; height:306px; z-index:1; left: 235px; top: 242px;">
<form action="codigo.php" method="post">
<strong><font color="#009900" size="-1" face="Century Gothic">Elige idioma:</font></strong>
<br>
<select name="tipobusqueda">
<option value="palabra_sin_tildes">es-pl
<option value="slowo_bez_znakow">pl-es
</select>
<br>
<font color="#009900" size="-1" face="Century Gothic"><strong>escribe la palabra :</strong></font><br>
<input name="terminobusqueda" type=text>
<br>
<input type=submit value="Buscar">
</form>
</div>
</body>
</html>
---------
PHP
<html>
<head>
<meta http-equiv="Content-Type" content= "text/html; charset=8859-2 />
<title>Resultados</title>
</head>
<body>
<h1>La traduccion español - polaco</h1>
esto son caracteres especiales polacos : ACELNÓSZZacelnószz Y esto Esañol, Ññ
<?php
$terminobusqueda = trim ($_POST['terminobusqueda']);
$tipobusqueda = trim($_POST['tipobusqueda']);
//AHORA EL SCRIPT QUE NO FUNCIOONA Y NO SE PORQUE.
$terminobusqueda = strtr($terminobusqueda,"ACELNÓSZZacelnószzÑñ.","ACELNOSZZacelnoszzNn");
//AQUI SE TERMINA
Y luego esta bien, todo funciona .
if (!$tipobusqueda || !$terminobusqueda)
{
echo "No has introducido los detalles de la busqueda. Por favor vuelve e intntalo de nuevo.";
exit;
}
$tipobusqueda = addslashes($tipobusqueda);
$terminobusqueda = addslashes($terminobusqueda);
@ $db = mysql_pconnect("xxxx", "xxxxxx", "xxxxxx");
if (!$db)
{
echo "Error: No se ha podido conectar a la base de datos. Por favor, prueba de nuevo ms tarde.";
exit;
}
mysql_select_db("xxxxxxxx");
$consulta = "select * from espa_polo where ".$tipobusqueda." like '%".$terminobusqueda."%'";
$resultado = mysql_query($consulta);
$num_resultados = mysql_num_rows($resultado);
echo "
<p>nr de palabras encontradasidaida: ".$num_resultados."</p>
";
for ($i=0; $i <$num_resultados; $i++)
{
$row = mysql_fetch_array($resultado);
if ($tipobusqueda == "slowo_bez_znakow") {
echo "
<p><strong>".($i+1).". Slowo polskie to: ";
echo stripslashes($row["palabra_pl"]);
echo "</strong><br>Tlumaczenie na hiszpenski: ";
echo stripslashes($row["palabra_es"]);
echo "<br>przyklad: ";
echo stripslashes($row["ejemplo"]);
$odmiana=stripslashes($row["Ja"]);
if ($odmiana) {
echo "</br>";
echo "Yo - ";
echo stripslashes($row["Ja"]);
} else {
echo "no";
}
} else {
echo "
<p><strong>".($i+1).". Palabra Espanola: ";
echo stripslashes($row["palabra_es"]);
echo "</strong><br>Palbra Polaca: ";
echo stripslashes($row["palabra_pl"]);
echo "<br>ejemplo: ";
echo stripslashes($row["ejemplo"]);
}
echo "</p>
";
}
?>
</body>
</html>
---------------------------------------------
SQL
-- phpMyAdmin SQL Dump
-- version 2.6.4-pl3
-- http://www.phpmyadmin.net
--
-- Host: xxxxxxxxxxxxxx
-- Czas wygenerowania: 26 Cze 2008, 18:45
-- Wersja serwera: 5.0.51
-- Wersja PHP: 5.2.0
--
-- Baza danych: `xxxxxxxx
--
-- --------------------------------------------------------
--
-- Struktura tabeli dla `espa_polo`
--
CREATE TABLE `espa_polo` (
`slowo_bez_znakow` varchar(50) collate utf8_polish_ci NOT NULL,
`palabra_sin_tildes` varchar(50) character set utf8 collate utf8_spanish_ci NOT NULL,
`nr_palabra` int(10) unsigned NOT NULL auto_increment,
`palabra_es` char(50) character set utf8 collate utf8_spanish2_ci NOT NULL,
`palabra_pl` char(50) collate utf8_polish_ci NOT NULL,
`Ja` char(50) collate utf8_polish_ci NOT NULL,
`Ty` char(50) character set ucs2 collate ucs2_polish_ci NOT NULL,
`on_` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`My` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Wy` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Oni` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`One` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Pan` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Pani` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Panowie` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Panie` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`wprzyszlosci` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`wprzszlosci` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Yo` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Tu` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`El` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Ella` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Nosotros` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Vosotros` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Ellos` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Ellas` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Usted` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`Ustedes` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`pasado` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`futuro` char(50) character set latin1 collate latin1_german1_ci NOT NULL,
`ejemplo` text character set latin1 collate latin1_german1_ci,
PRIMARY KEY (`nr_palabra`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=6 ;
--
-- Datos desde tabla `espa_polo`
--
INSERT INTO `espa_polo` VALUES ('czesc', 'hola', 4, 'Hola', 'Czesc', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', NULL);
INSERT INTO `espa_polo` VALUES ('hiszpania', 'Espana', 5, 'España', 'Hiszpania', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', NULL);
------------------------------------------
Asi que parese que funccion: $terminobusqueda = strtr($terminobusqueda,"ACELNÓSZZacelnószzÑñ.","ACELNOSZZacelnoszzNn");
no funciona .Pero, no se porque.
¿Puedes ayudarme?
Muchas gracias.
Entiendo que lo que pretendes con la instrucción:
$terminobusqueda=strtr($terminobusqueda,"ACELNÓSZZacelnószzÑñ.","ACELNOSZZacelnoszzNn");
Es sustituir los caracteres 'especiales' por caracteres normales (aunque aquí aparecen algunos 'normales' supongo que debe ser por la visualización de la respuesta).
Yo he probado la línea en cuestión y me funciona. No sé si cuando dices: // Aquí se termina, quieres decir que la ejecución se detiene. En principio no tiene porqué detenerse, porque la sentencia es correcta. Lo único raro que encuentro es que el segundo parámetro tiene una letra más que el tercero (un punto al final).
Otro problema que he encontrado está en la línea 3 de código.php, en la que falta cerrar comillas después del 2:
<meta http-equiv="Content-Type" content= "text/html; charset=8859-2 />
Por lo demás, he ejecutado el código y si pido por la palabra España, obtengo lo que creo que es el resultado correcto y que te copio a continuación:
La traducción español - polaco
Esto son caracteres especiales polacos : ACELNÓSZZacelnószz Y esto Esañol, Ññ
Nr de palabras encontradasidaida: 1
1. Palabra Española: España
Palbra Polaca: Hiszpania
Ejemplo:
No entiendo porque a ti te funciona y a mi no .
Voy a intentar con servidor local.A lo mejor el problema esta en el servidor.
Muchas gracias por ayudarme.
Por ahora ya no voy a tener tiempo para solucionarlo, entonces después de vacaciones voy a luchar con el tema otra vez.
Hasta luego

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas