Php ';HTML文档的字符编码未声明';问题

Php ';HTML文档的字符编码未声明';问题,php,html,character-encoding,meta-tags,Php,Html,Character Encoding,Meta Tags,我制作了一个用户可以填写的表单,它检查用户是否正确插入了电子邮件 如果返回false:用户将看到一条错误消息 如果返回true:它将向用户显示一条确认消息,但也将将数据插入数据库 因此,当我试图在PHP文件中添加表单,以便在同一页面上发出警报或向用户提供错误消息时,出现了问题。我开始出现以下错误: 未声明HTML文档的字符编码。如果文档包含US-ASCII范围之外的字符,则在某些浏览器配置中,文档将呈现乱码文本。页面的字符编码必须在文档或传输协议中声明 因此,我试图通过恢复到旧版本来恢复它,

我制作了一个用户可以填写的表单,它检查用户是否正确插入了电子邮件

  • 如果返回false:用户将看到一条错误消息
  • 如果返回true:它将向用户显示一条确认消息,但也将
    将数据插入数据库
因此,当我试图在PHP文件中添加表单,以便在同一页面上发出警报或向用户提供错误消息时,出现了问题。我开始出现以下错误:

未声明HTML文档的字符编码。如果文档包含US-ASCII范围之外的字符,则在某些浏览器配置中,文档将呈现乱码文本。页面的字符编码必须在文档或传输协议中声明

因此,我试图通过恢复到旧版本来恢复它,我必须剪切和粘贴一些代码,但没有太复杂。出于某种奇怪的原因,我仍然会犯这个错误。当然,我在Stackoverflow上查看了关于这个问题的类似主题,但没有一个答案让我更进一步。例如,在页面的标题中添加
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();