Php ';HTML文档的字符编码未声明';问题
我制作了一个用户可以填写的表单,它检查用户是否正确插入了电子邮件Php ';HTML文档的字符编码未声明';问题,php,html,character-encoding,meta-tags,Php,Html,Character Encoding,Meta Tags,我制作了一个用户可以填写的表单,它检查用户是否正确插入了电子邮件 如果返回false:用户将看到一条错误消息 如果返回true:它将向用户显示一条确认消息,但也将将数据插入数据库 因此,当我试图在PHP文件中添加表单,以便在同一页面上发出警报或向用户提供错误消息时,出现了问题。我开始出现以下错误: 未声明HTML文档的字符编码。如果文档包含US-ASCII范围之外的字符,则在某些浏览器配置中,文档将呈现乱码文本。页面的字符编码必须在文档或传输协议中声明 因此,我试图通过恢复到旧版本来恢复它,
- 如果返回false:用户将看到一条错误消息
- 如果返回true:它将向用户显示一条确认消息,但也将
将数据插入数据库
meta
信息,我还创建了一个PHP标题,如下所示:header('Content-type:text/html;charset=utf-8')代码>之后,我读了一些关于这个错误的文章,但没有一篇帮助我解决这个问题
下面是我的代码示例。我就是在这一页上发现错误的:
<?php
include_once('credentials.php');
mysql_connect($host, $user, $pass) or die(mysql_error());
mysql_select_db($db) or die(mysql_error());
include_once('functions.php');
$apples = sanitize($_POST['Apple']);
$oranges = sanitize($_POST['Orange']);
$melons = sanitize($_POST['Melon']);
$pears = sanitize($_POST['Pear']);
$strawberries = sanitize($_POST['Strawberry']);
$grapes = sanitize($_POST['Grape']);
if($_POST['Grape'] == 'Yes')
{ $grapes = 1; }
else
{ $grapes = 0; }
$blueberries = sanitize($_POST['Blueberry']);
if (checkStrawberries($strawberries) == true) {
mysql_query(" INSERT INTO tablename (Name, Weight, Color, Ripeness, Age, Origin, Destination)
VALUES ('$apples', '$oranges', '$melons', '$Pears', '$strawberries', '$grapes', '$blueberries') ");
or die(mysql_error());
echo '<!DOCTYPE html>
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
</head>
<title>Page</title>
<body>
True
<a href="../index.php">home</a>
</body>
</html>';
} else {
echo '<!DOCTYPE html>
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
</head>
<title>Pagina</title>
<body>
False
<a href="../index.php">home</a>
</body>
</html>';
}
?>
检查草莓的功能如下:
function checkEmail($email) {
if (!preg_match("/^( [a-zA-Z0-9] )+( [a-zA-Z0-9\._-] )*@( [a-zA-Z0-9_-] )+( [a-zA-Z0-9\._-] +)+$/" , $email)) {
return false;
}
return true;
}
“清理”功能如下所示:
function sanitize($dirty){
$clean = htmlspecialchars($dirty);
$cleaner = mysql_real_escape_string($clean);
return $cleaner;
}
我将首先尝试一个包含HTTP头和meta标记的文件
<?php
header("Content-Type: text/html; charset=utf-8");
?>
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
</head>
<body>
text
</body>
</html>
文本
如果这没有触发错误,则可能是代码中的某些内容。例如,前面的空格在PHP聊天中经过一些讨论后,问题似乎来自额外的分号
发件人:
mysql_query(); or die();
致:
你到底在哪里看到了这个消息,是什么产生了它?我希望你没有真正命名你的函数函数?(函数($\u POST['1']);
)。这可能也会弄乱一些代码,因为function
是一个保留关键字。@jelmer我已经说过,我必须更改一些有关变量和函数名称的内容。这是由于保密协议。@MarioS很抱歉我错过了。至少给他们一个表示函数的描述性名称。因此,我们可以猜测数据是如何变化的,也许这将帮助我们回答您的问题。那么,您是否正确设置了字符集标题?你能在Firebug网络选项卡的响应头中看到它吗?我不认为数据是通过Include传递的,它们只包含一些函数。检查HTTP响应头-有时HTTP服务器可能会修改编码。我测试了这一点,它没有产生任何复杂情况(正如我预期的那样)但是,我确实确定了产生错误的代码段。原文中有更详细的解释+顺便说一句:)谢谢你,图基!这确实是问题所在。这是一个不容忽视的愚蠢错误。
mysql_query(); or die();
mysql_query() or die();