谁能告诉我PHP函数转换ø成Å什么?
我存储特殊字符,如æ, ø, å, ö, ähtml编码字符.
我搜索谷歌和Stackoverflow,但无法弄清楚要搜索什么.
我以前管它,但不记得如何:(
以下不起作用:
$tmp = ('Øving, ære, blå');
$tmp2 = htmlspecialchars($tmp);
echo $tmp.' - '.$tmp2;
Run Code Online (Sandbox Code Playgroud)
输出是: Øving, ære, blå - Øving, ære, blå
我也尝试过htmlentities:
$tmp = ('Øving, ære, blå');
$tmp2 = htmlentities($tmp);
echo $tmp.' - '.$tmp2;
Run Code Online (Sandbox Code Playgroud)
这输出: Øving, ære, blå - Ã?ving, ære, blÃ¥
当我想要的时候
Øving, ære, blå - Øving, ære, blå
这取决于你的特殊字符编码的编码(在php中).假设您可以使用UTF-8
$str2 = htmlentities($str2,ENT_COMPAT,"UTF-8");
Run Code Online (Sandbox Code Playgroud)
但以下可能更强大(如果您支持mb_函数)
$str2 = mb_convert_encoding ($str1,"HTML-ENTITIES","UTF-8");
Run Code Online (Sandbox Code Playgroud)
更新:我已经在指定的示例(字符u + 00C5)中验证了两者都有效.并且第二种确实在以下意义上更加健壮:当找不到给定unicode字符的命名实体时,第一种选择使其保持完整,第二种选择使用数字实体.如果我们想要避免HTML页面中的非ascii字符,那么第二个是首选.一些行要检查:
<?php
for($i=129;$i<3000;$i++)
printUnicode($i);
function printUnicode($value) {
$one_character = pack("L", $value);
$u8 = iconv("UTF-32", "UTF-8", $one_character);
echo join("\t",array(
$value,
$u8,
htmlentities($u8,ENT_COMPAT,"UTF-8"),
mb_convert_encoding($u8,"HTML-ENTITIES","UTF-8")))
. "\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
以及一些示例输出:
187 » » »
188 ¼ ¼ ¼
189 ½ ½ ½
190 ¾ ¾ ¾
191 ¿ ¿ ¿
192 À À À
193 Á Á Á
194 Â Â Â
195 Ã Ã Ã
196 Ä Ä Ä
197 Å Å Å
...
655 ? ? ʏ
656 ? ? ʐ
657 ? ? ʑ
658 ? ? ʒ
659 ? ? ʓ
Run Code Online (Sandbox Code Playgroud)