Php 为什么我的输出会改变?

Php 为什么我的输出会改变?,php,utf-8,Php,Utf 8,我正在使用PHP中的UTF-8编码,我一直设法获得我想要的输出。然后在代码没有任何变化的情况下,输出会突然发生变化 以前我得到的是希伯来语输出。现在我得到了“&&&&&&” 你知道这是什么原因吗 使用标题设置内容类型后,请尝试如下操作 header('Content-Type: text/html; charset=utf-8'); 使用标题设置内容类型后,请尝试如下操作 header('Content-Type: text/html; charset=utf-8'); 这些是最常见的问题:

我正在使用PHP中的UTF-8编码,我一直设法获得我想要的输出。然后在代码没有任何变化的情况下,输出会突然发生变化

以前我得到的是希伯来语输出。现在我得到了“&&&&&&”


你知道这是什么原因吗

使用
标题设置内容类型后,请尝试如下操作

header('Content-Type: text/html; charset=utf-8');

使用
标题设置内容类型后,请尝试如下操作

header('Content-Type: text/html; charset=utf-8');

这些是最常见的问题:

  • 您正在其中创建PHP/HTML文件的编辑器
  • 查看网站时使用的web浏览器
  • 在web服务器上运行的PHP web应用程序
  • MySQL数据库
  • 您从外部读取/写入数据的任何其他地方(memcached、api、RSS提要等)
你可以尝试的事情很少:

配置编辑器

确保您的文本编辑器、IDE或编写PHP代码时使用的任何工具都以UTF-8格式保存文件。您的FTP客户端、scp、SFTP客户端不需要任何特殊的UTF-8设置

确保web浏览器知道如何使用UTF-8

为了确保用户的浏览器都知道将所有数据读/写为UTF-8,您可以在两个地方进行设置

内容类型标记

确保content type META header将UTF-8指定为如下字符集:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
ini_set('default_charset', 'utf-8')
配置MySQL连接

现在您知道您从用户接收的所有数据都是UTF-8格式的,我们需要配置PHP和MySQL数据库之间的客户端连接。 执行MySQL查询有一种通用方法:

SET NAMES utf8;
…根据您使用的客户端/驱动程序,有一些帮助程序函数可以更轻松地执行此操作:

使用内置的mysql函数

用MySQLi

*使用PDO_MySQL(连接时)*

MySQL数据库

我们现在差不多做到了,您只需要确保MySQL知道将数据以UTF-8的形式存储在表中。您可以通过查看showtable STATUS输出中的排序规则值来检查它们的编码(在phpmyadmin中,这显示在表列表中)。 如果您的表尚未使用UTF-8(很可能是拉丁文1),则需要通过对每个表运行以下命令来转换它们:

ALTER TABLE myTable CHARACTER SET utf8 COLLATE utf8_general_ci;
最后要注意的一件事

完成所有这些步骤后,您的应用程序应该不会出现任何字符集问题。 需要注意的是,大多数PHP字符串函数都不支持unicode,因此,例如,如果对多字节字符运行strlen(),它将返回输入中的字节数,而不是字符数。您可以通过使用多字节字符串PHP扩展来解决这个问题,尽管这些字节/字符问题导致问题的情况并不常见


以下是最常见的问题:

  • 您正在其中创建PHP/HTML文件的编辑器
  • 查看网站时使用的web浏览器
  • 在web服务器上运行的PHP web应用程序
  • MySQL数据库
  • 您从外部读取/写入数据的任何其他地方(memcached、api、RSS提要等)
你可以尝试的事情很少:

配置编辑器

确保您的文本编辑器、IDE或编写PHP代码时使用的任何工具都以UTF-8格式保存文件。您的FTP客户端、scp、SFTP客户端不需要任何特殊的UTF-8设置

确保web浏览器知道如何使用UTF-8

为了确保用户的浏览器都知道将所有数据读/写为UTF-8,您可以在两个地方进行设置

内容类型标记

确保content type META header将UTF-8指定为如下字符集:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
ini_set('default_charset', 'utf-8')
配置MySQL连接

现在您知道您从用户接收的所有数据都是UTF-8格式的,我们需要配置PHP和MySQL数据库之间的客户端连接。 执行MySQL查询有一种通用方法:

SET NAMES utf8;
…根据您使用的客户端/驱动程序,有一些帮助程序函数可以更轻松地执行此操作:

使用内置的mysql函数

用MySQLi

*使用PDO_MySQL(连接时)*

MySQL数据库

我们现在差不多做到了,您只需要确保MySQL知道将数据以UTF-8的形式存储在表中。您可以通过查看showtable STATUS输出中的排序规则值来检查它们的编码(在phpmyadmin中,这显示在表列表中)。 如果您的表尚未使用UTF-8(很可能是拉丁文1),则需要通过对每个表运行以下命令来转换它们:

ALTER TABLE myTable CHARACTER SET utf8 COLLATE utf8_general_ci;
最后要注意的一件事

完成所有这些步骤后,您的应用程序应该不会出现任何字符集问题。 需要注意的是,大多数PHP字符串函数都不支持unicode,因此,例如,如果对多字节字符运行strlen(),它将返回输入中的字节数,而不是字符数。您可以通过使用多字节字符串PHP扩展来解决这个问题,尽管这些字节/字符问题导致问题的情况并不常见

在此处形成:

尝试此功能->

$html = "Bla Bla Bla...";
$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");
有关更多信息-

请尝试此功能->

$html = "Bla Bla Bla...";
$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");

更多信息-

我把这个方法放在一起,并在我正在处理的文件中调用它,这似乎解决了这个问题

function setutf_8()
    {
    header('content-type: text/html; charset: utf-8');
    mb_internal_encoding('UTF-8');
    mb_http_output('UTF-8');
    mb_http_input('UTF-8');
    mb_language('uni');
    mb_regex_encoding('UTF-8');
    ob_start('mb_output_handler');
    }

谢谢你的帮助!:)

我把这个方法放在一起,并在我正在处理的文件中调用它,这似乎解决了这个问题

function setutf_8()
    {
    header('content-type: text/html; charset: utf-8');
    mb_internal_encoding('UTF-8');
    mb_http_output('UTF-8');
    mb_http_input('UTF-8');
    mb_language('uni');
    mb_regex_encoding('UTF-8');
    ob_start('mb_output_handler');
    }

谢谢你的帮助!:)

你怎么解释我有这个工作