【发布时间】:2011-04-26 13:06:18
【问题描述】:
所以我通过 HTML 表单将数据发送到我的 MySQL 数据库。
当我发送带有特殊字符(如“ñ”或重音符号“á、é、í..”的单词时,当我在表格中检查结果时,这些字符显示为“ã±”。
我几乎尝试了所有方法:
我的html表单页眉有
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
表单接受带有<form accept-charset="UTF-8">的UTF-8
我还添加到我的动作 php 脚本中:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET'utf8'");
然后我尝试了htmlentities
但所有的“ñ”都显示为&atilde;&
我的数据库、表和字段设置在 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);
?>
【问题讨论】:
-
您在哪里使用什么代码检查表格中的结果?
-
我检查了我的 phpMyAdmin 中添加的表格、字段和数据。
-
@Danny 如果您在 HTML 页面中再次输出该数据会发生什么?
ã±几乎可以肯定是 UTF-8 字符的 ISO-8859-1 表示,但尚不清楚它发生在哪里 -
@Pekka 我还没有显示数据的页面,但我也很奇怪在我的 phpmyadmin 中看到“ã±”。另外,我从包含“ñ”字符的文本文件中导入了更多数据并正确显示,此问题仅在从 html 表单添加数据时发生。
-
@Pekka:公平点!错误一定是在其他地方,然后我猜......@Danny,我知道,我只是在开玩笑,但我做这个过滤是没用的。您只需要转义字符串,这就是 Pekka 在他的回答中告诉您的内容。 @Col。 Shrapnel:我知道这听起来很愚蠢,但我记得在文件编码影响变量方面遇到了一些问题。暂时没看懂,下次试试看。
标签: php mysql forms character-encoding