2

我有 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 格式提供(它是)。

任何人都知道如何解决这个编码问题?

4

1 回答 1

0

我要放弃这个,因为我没有找到任何解决方案。email() 函数也不安全,我将使用 phpmailer 或 swiftmailer(我倾向于后者)。

于 2013-02-08T17:50:30.623 回答