[英]HTML form with spanish characters displayed wrong in MySQL database
因此,我正在通過HTML表單將數據發送到我的MySQL數據庫。
當我發送帶有特殊字符(如“ñ”或帶有重音符號“á,é,í..”)的單詞時,當我在表格中檢查結果時,這些字符將顯示為“ã±”。
我幾乎嘗試了所有事情:
我的html表單頁面標題有
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
表單使用<form accept-charset="UTF-8">
我還添加了我的動作PHP腳本:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET'utf8'");
然后我嘗試了htmlentities
但所有的“ñ”都顯示為ã&
我的數據庫,表和字段都在utf8_general_ci中設置,也嘗試過utf8_spanish_ci,但沒有任何更改。
我不知道該怎么辦,這里還有什么我想念的嗎?
這是我正在使用的PHP腳本:
<?php
// Make a MySQL Connection
$con = mysql_connect("I DELETED THIS");
if (!$con)
{
die('No se pudo conectar a la BD: ' . mysql_error() );
}
mysql_select_db("ldma", $con);
$nombre = '';
$ape1 = '';
$ape2 = '';
$apodo = '';
$errmsg = '';
if ($_POST['enviado']==1)
{
$nombre = $_POST['nombre'];
$ape1 = $_POST['ape1'];
$ape2 = $_POST['ape2'];
$apodo = $_POST['apodo'];
$permitidos = "abcdefghijklmnopqrstuvwxyzÁÉÍÓÚÜüáéíóúñÑABCDEFGHIJKLMNOPQRSTUVWXYZ";
for ($i=0; $i<strlen($nombre); $i++)
{
if (strpos($permitidos, substr($nombre,$i,1))===false)
{$errmsg = 1; }
else
{$errmsg = '';}
}
/*if (ereg('^[ a-zA-Zñ]+$', $nombre))
{$errmsg = '';
}
else
{$errmsg = 1;
}*/
if(strlen($nombre) == 0 || strlen($nombre) <= 3)
{$errmsg = 1;}
else if (strlen($nombre) > 20)
{$errmsg = 1;}
if(strlen($ape1) == 0 || strlen($ape1) <= 3)
{$errmsg = 1;}
else if (strlen($ape1) > 15)
{$errmsg = 1;}
if(strlen($ape2) == 0 || strlen($ape2) <= 3)
{$errmsg = 1;}
else if (strlen($ape2) > 15)
{$errmsg = 1;}
if(strlen($apodo) > 15)
{$errmsg = 1;}
if($errmsg == '')
{
// Insert a row of information into the table "example"
$arr = array("nombre", "ape1", "ape2", "apodo");
foreach ($arr as $field)
{
$_POST["$field"] = utf8_encode($_POST["$field"]);
$_POST["$field"] = strtolower($_POST["$field"]);
$_POST["$field"] = ucwords($_POST["$field"]);
}
$sql= "INSERT INTO **** (nombre, ape1, ape2, apodo)
VALUES ('$_POST[nombre]', '$_POST[ape1]', '$_POST[ape2]', '$_POST[apodo]')" ;
if (!mysql_query($sql, $con))
{
echo "<center><br /><h2>Al parecer este maestro ya existe, intenta de nuevo.</h2></center> ";
}
else {
echo "<center><br /><h2>Gracias, el maestro ha sido agregado. </h2></center> ";
}
}
}
if($errmsg == 1)
{ echo "<center><br/><br/><h2><u>Error: Revisa los datos e intenta de nuevo.</u></h2> </center>
<center><h2>Recuerda que es recomendable </h2> </center>
<center><h2>activar JavaScript en las opciones de tu navegador. </h2></center>";
}
/*if ($_POST['enviado'] != 1)
{
echo 'Error: No se agregaron los datos';
}*/
mysql_close($con);
?>
只需使用mysql_real_escape_string()即可,而無需執行其他任何操作。 例如:mysql_real_escape_string($ user),mysql_real_escape_string($ password));
您為什么如此擔心您的數據如何在phpmyAdmin中顯示? 重要的是,當您在html頁面中再次顯示它們時,您將獲得正確的顯示。
您最終可能會在數據庫中獲得正確的顯示,但隨后在html上可能顯示錯誤
但是我認為集合名稱可以完成這項工作,即使使用字符串也可以解決我的類似問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.