首先,大家好。我有一个PHP和波兰语字符的问题,即“ąĄćĆĘĘŁŁŃóÓśŚźðż”。下面是我的示例代码。我在$string
变量中有所有波兰标志,并且在$utfString
变量中有相应的UTF-8(十六进制)重新标记。
<?php
header('Content-Type: text/html; charset=utf-8');
$string = 'ą Ą ć Ć ę Ę ł Ł ń Ń ó Ó ś Ś ź Ź ż Ż';
$utfString = "\xC4\x85 \xC4\x84 \xC4\x87 \xC4\x86 ".
"\xC4\x99 \xC4\x98 \xC5\x82 \xC5\x81 ".
"\xC5\x84 \xC5\x83 \xC3\xB3 \xC3\x93 ".
"\xC5\x9B \xC5\x9A \xC5\xBA \xC5\xB9 ".
"\xC5\xBC \xC5\xBB";
echo $string;
var_dump(utf8_encode($string));
echo $utfString;
var_dump(utf8_encode($utfString));
?>
浏览器的响应显示如下:
� � � � � � � � � � � � � � � � � �
string '¹ ¥ æ Æ ê Ê ³ £ ñ Ñ ó Ó ¿ ¯' (length=53)
ą Ą ć Ć ę Ę ł Ł ń Ń ó Ó ś Ś ź Ź ż Ż
string 'Ä Ä Ä Ä Ä Ä Å Å Å Å Ã³ à ŠŠź Ź ż Å»' (length=89)
正如您所看到的那些字符串的输出不同。我的问题是我该怎么办呢?我正在考虑编写一个函数,将代码中的波兰语符号转换为各自的UTF-8表示,但这似乎远非最优且相当困难。另一种选择就是只要在需要波兰标志时使用这种UTF-8表示,但话说再说一次,我不认为这应该是这么难和复杂。有趣的是,当我从数据库中获取这样一个字符串并显示它时,一切正常。
脚本文件编码为UTF-8,没有BOM。
答案 0 :(得分:0)
utf8_encode
是一个命名不佳的函数,很少你需要它。它将ISO 8859-1中编码的文本转换为UTF-8,因此如果您的文本不是以特定的编码开头,则无法帮助您。
PHP没有任何内置的字符编码,Unicode或其他概念;字符串只是一组字节,而echo
只是将这些字节发送到输出(因此通常是发送到浏览器)。您不需要告诉PHP您输出的字符串是UTF-8,因为它不关心。
在您的情况下,我认为答案就是不要拨打utf8_encode
。