为什么扩展的ascii字符(â,é等)被<?>字符替换?

Mic*_*ICE 3 html php character-encoding

为什么扩展的ascii字符(â,é等)被<?>字符替换?

我附加了一张图片...但是我使用PHP从MySQL中提取数据,其中一些位置有扩展字符...我使用的是字体Arial.

你可以在这里看到屏幕截图:http://img269.imageshack.us/i/funnychar.png/

在建议之后仍然发生,这是我做的:

我的firefox(view-> encoding)在添加行后设置为UTF-8,但是,选项标签内的文本仍显示有趣的字符而不是实际的重音字符.我现在应该寻找什么?

更新: 我在PHP程序中有以下内容给我那些<?>字符...

ini_set( 'default_charset', 'UTF-8' );
Run Code Online (Sandbox Code Playgroud)

在我的zend db对象创建之后,我正在设置以下查询:

$db->query("SET NAMES utf8;");
Run Code Online (Sandbox Code Playgroud)

我将所有表格更改为UTF-8并重新插入所有数据(浪费时间),因为它从未帮助过.之前是latin1.

STATUS也在报告:

Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 4 days 20 hours 59 min 41 sec
Run Code Online (Sandbox Code Playgroud)

看看页面的来源,我看到<option value ="Br l Lake">Br l Lake

OK- NEW UPDATE- 我将PHP和HTML中的所有内容更改为:

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

现在它的工作原理是什么?如何将其全部转换为UTF-8?

Dan*_*ert 19

这就是浏览器在不知道用于角色的编码时所做的事情.确保在headers或markup meta中指定发送给客户端的文本的编码类型.

在HTML中:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Run Code Online (Sandbox Code Playgroud)

在PHP中(在将任何其他内容发送到客户端之前):

header('Content-Type: text/html; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)

我假设你想要UTF-8编码.如果您的网站使用其他文字编码,则应将UTF-8替换为您正在使用的编码.

关于使用HTML指定编码的一件事是,浏览器会在看到Content-Type元标记后重新开始呈现页面,因此您应该在页面中的<meta />标记之后立即包含标记,以便<head />浏览器不再执行任何操作加工比它需要的.

另一个常见的字符集是"iso-8859-1"(Basic Latin),您可能希望使用它而不是UTF-8.您可以从这篇关于字符编码和网页的精彩文章中找到更多详细信息.如果您需要特定类型,您还可以在此处获得详尽的字符编码列表.


如果没有别的办法,另一种(罕见的)可能是您的计算机上没有安装显示该页面所需字符的字体.我试过在我自己的服务器上重复你的结果并没有运气,可能是因为我的机器上安装了很多字体,因此浏览器总是可以用一种字体替换另一种字体的不可用字符.

通过进一步调查我注意到的是,如果文本以不同于浏览器报告的编码的编码发送,则Unicode字符可以意外地呈现.要解决这个问题,我使用了HTML字符实体表示特殊字符,所以â变成&#226;我的HTML和é&#233;.一旦我这样做,无论我报告的编码是什么,我的角色都能正确呈现.

显然,您不希望将数据库修改为HTML编码Unicode字符.如果必须这样做,最好的选择是使用PHP函数htmlentities().您应该对任何希望使用Unicode字符的数据驱动文本使用此函数.这可能很烦人,但如果指定编码没有帮助,这是强制Unicode字符工作的最后一招.

  • 调试此可能性的一种快速方法是手动更改浏览器中的编码.例如,在Firefox中使用View-> Character Encoding. (5认同)