我有 php 函数 function_var() 的休闲测试用例:
<?php
$inputvalue = "Ž"; //NUM = 142 on the ASCII extended list
$sanitized = filter_var($inputvalue, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH);
echo 'The sanitized output: '.$sanitized."\n"; // --> & #197;& #189; (Å ½)
?>
如果你运行上面的代码片段,输出不是我期望返回的。Ž 是 ASCII 扩展列表中的第 142 位(参见:ascii-code[dot]com)。所以我期望得到的是'' (字符串,没有空格)。
我得到了帮助,找出出了什么问题,我只是不知道如何解决它。
如果将 'Ž' 转换为 Hex UTF-8 字节,则会得到:C5 BD。这些十六进制字节对应于 ISO-8859 十六进制值:Å ½(参见:http ://cs.stanford.edu/~miles/iso8859.html )。然后这 2 个字符被 filter_var 解码为 '& #197;& #189;'。
看到这个在线转换器!!!: http ://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=%C5%BD&mode=char
所以基本上会发生什么:UTF-8 字节用于将它们转换为 Latin-1 字符字节。转换器页面显示以下内容:“UTF-8 字节作为 Latin-1 字符”是您在使用仅知道 8 位字符的终端或编辑器显示 UTF-8 文件时通常看到的内容。
我不认为我的编辑是问题。我正在使用带有 Coda 2(默认为 UTF-8)的 Mac。该测试还在元字符设置为 utf-8 的 html5 页面上进行了测试。此外,我使用的是默认的 XAMPP localhost 服务器。使用 Firefox 中的 Firebug,我还检查了文件是否以 UTF-8 格式提供(它是)。
任何人都知道如何解决这个编码问题?