PHP编码类型头放在哪里?

PHP编码类型头放在哪里?,php,character-encoding,Php,Character Encoding,我正在学习如何处理UTF8字符集,建议在PHP脚本的输出标题中显式设置编码类型,如下所示: header('Content-Type: text/html; charset=utf-8'); 我的问题是我应该把这个标题放在哪里。我有一个配置文件,它包含在每个脚本中,并首先运行。我是否应该将其放在该文件的顶部,以便在每个php文件中首先包含该头文件 这是否会影响我设置其他标题的能力,包括标题位置向下重定向?或者我应该把它放在任何html输出之前,比如模板文件的呈现?Ie-这个头文件可以在所有其他

我正在学习如何处理UTF8字符集,建议在PHP脚本的输出标题中显式设置编码类型,如下所示:

header('Content-Type: text/html; charset=utf-8');
我的问题是我应该把这个标题放在哪里。我有一个配置文件,它包含在每个脚本中,并首先运行。我是否应该将其放在该文件的顶部,以便在每个php文件中首先包含该头文件

这是否会影响我设置其他标题的能力,包括标题位置向下重定向?或者我应该把它放在任何html输出之前,比如模板文件的呈现?Ie-这个头文件可以在所有其他php处理之前就位吗?这样做的后果是什么?它是否影响服务器端的任何内容,或者仅仅影响输出的编码


谢谢

唯一的限制是在调用
header
函数之前不输出任何内容(
print
echo
,…)。除此之外,您可以在任何地方调用该函数,并且可以调用任意次数(您可以在以后设置其他标题)。

您可以在开始发送页面文本之前将header指令放在任何位置。相对于其他标题的顺序并不重要;但是,如果您发送了一个字符的页面文本,PHP将给您一个错误


请注意,“发送页面文本”有时可能由于另一条错误消息或标签前后的空格等原因而意外发生。

尽管此标题的早期设置不会影响服务器端或其他类型的标题,您的问题是基于以下假设提出的:您的代码将要输出的唯一内容是html类型

但是,通用PHP应用程序有时会输出一些其他类型的内容,如
application/pdf
application/excel
或其他类型的内容


因此,在html输出之前发送它似乎正是正确的位置。

我只是建议将其作为替代方案。但是可以使用以下方法在php.ini中固定该设置:

default_mimetype = "text/html; charset=UTF-8"

这在共享主机上不太常见,其中一些用户可能依赖于L1。但是,如果您使用自己的服务器,并且希望确保无论调用何种代码和PHP脚本,都能正确设置它,那么。

只要它位于-tags内部,并且在创建任何输出之前(echo、print、print\r等,或者-tags之前的任何HTML)

好的方法:

<?php
$var = "hello world";
$var2 = "Goodbye world!";

header();

echo $var2;
?>

好的方法:

<?php
header();
$var = "hello world";
$var2 = "Goodbye world!";



echo $var2;
?>
<?php
$var = "hello world";
$var2 = "Goodbye world!";

echo $var2;
header();
?>

不好的方法:

<?php
header();
$var = "hello world";
$var2 = "Goodbye world!";



echo $var2;
?>
<?php
$var = "hello world";
$var2 = "Goodbye world!";

echo $var2;
header();
?>


希望这有帮助

如果我删除内容类型部分,只指定字符集,并且在输出zip或CSV文件之前不重新设置此标题,会怎么样?例如,解决这个难题?我只是想确保默认情况下所有输出都是UTF8。然后,我可以在必要时更改编码。@Sherri重新设置它将是肮脏的黑客行为。为什么不在开始模板渲染之前将其设置在正确的位置?若要确保始终发送,请在web服务器中进行设置config@Col.弹片-是的,这是一个很好的观点。我只是希望在一个地方设置默认编码,然后根据需要重置。我没有一个好的地方可以把它放在所有输出呈现之前会发生的地方(一些输出不使用模板-ex错误日志页面、第三方插件等)。@Col.Shrapnel:解释得很好,+1.不确定是否在
default\u mimetype
中指定字符集,但至少在默认情况下,“charset=…”部分使用的值是。