字符串奇怪的字符编码问题

时间:2011-11-22 13:55:32

标签: php string encoding utf-8 character

这似乎是一个简单的操作,这里的编码完全拙劣。我只想检查字符串的第一个字符是否为£。我的php文件本身编码为UTF8-没有BOM。谢谢!

<?php
print "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN' "; 
print "'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n";
print "<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='eng' lang='en'>\n";
print "<head>\n";
print "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n";
print "<title>WAMP</title>\n";
print "<meta name='Description' content='Website Under Construction' />\n";
print "</head>\n";
print "<body>\n";
print "<p>\n";

$temp = "£Hello";
$charArray = preg_split('//', $temp, -1);
// preg_match_all('/./', $temp, $charArray);

print_r ($charArray);
print "<br />First Char: $temp[0]";

print "</p>\n";
print "</body>\n";
print "</html>";
?>

输出:

Array ( [0] => [1] => � [2] => � [3] => H [4] => e [5] => l [6] => l [7] => o [8] => )
First Char: �

期望的输出:

Array ( [0] => [1] £ [2] => H [3] => e [4] => l [5] => l [6] => o [7] => ) 
First Char: £

2 个答案:

答案 0 :(得分:2)

鉴于您正在使用适当的内容类型标头发送HTML,我猜你正在通过Apache网络服务器运行它。如果没有,那么请忽略我,但服务器配置中的其他地方可能有一个设置来执行此操作...

我之前遇到过这个问题,绝对一切都必须采用UTF8模式才能正常工作。

具体来说,我怀疑您需要在与包含以下内容的脚本相同的目录中创建.htaccess文件:

AddDefaultCharset UTF-8

显然重启Apache。

另外需要注意的是,如果您计划使用MySQL数据库,则还需要通过在连接后运行以下SQL命令来确保连接是UTF8编码:

SET NAMES utf8

答案 1 :(得分:1)

尝试mb_substr()

,而不是不能识别多字节的$temp[0]
if( mb_substr($temp, 0, 1, 'UTF-8') == '£' )
{
  ...
}