Php 为什么我的输出会改变?
我正在使用PHP中的UTF-8编码,我一直设法获得我想要的输出。然后在代码没有任何变化的情况下,输出会突然发生变化 以前我得到的是希伯来语输出。现在我得到了“&&&&&&”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'); 这些是最常见的问题:
你知道这是什么原因吗 使用
标题设置内容类型后,请尝试如下操作
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');
}
谢谢你的帮助!:) 你怎么解释我有这个工作