2013-02-06 25 views
2

我對PHP函數function_var()休耕測試用例:PHP的filter_var FILTER_FLAG_ENCODE_HIGH

<?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)。所以我期望得到的是'&#142';' (字符串,沒有空格)。

我有help找出發生了什麼問題我只是不知道如何解決它。

如果您將'Ž'轉換爲Hex UTF-8字節,您將獲得:C5 BD。這些十六進制字節與ISO-8859十六進制值相對應:Ž(請參閱:http://cs.stanford.edu/~miles/iso8859.html)。然後這兩個字符被filter_var解碼爲'&#197; '&#189;'。

看到這個onlineconverter !!!:http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=%C5%BD&mode=char

所以基本上會發生什麼:UTF-8字節用於其轉化爲Latin-1字符字節。轉換器頁面說明了下列情況:「UTF-8字節爲拉丁-1字符」是您在顯示帶有僅知道8位字符的終端或編輯器的UTF-8文件時通常會看到的內容。

我不認爲我的編輯是問題。我使用的是帶有Coda 2的Mac(默認爲UTF-8)。該測試也已在HTML5頁面上進行了測試,元字符集設置爲utf-8。此外,我正在使用默認的XAMPP本地主機服務器。在Firebug中,我還檢查了文件是否作爲UTF-8(它是)。

任何人都知道如何解決這個編碼問題?

+0

$ inputvalue是硬編碼到腳本還是來自用戶輸入或數據庫? – Mike

+0

糾正我,如果我錯了,但不'htmlspecialchars()'足夠? – Pateman

+0

@pateman:不,htmlspecialchars只有'<>「'&',例如html元字符,把它看作是mysql_real_escape_string()的html等價物,htmlentities()是更通用的」編碼任何東西「 –

回答

0

我gona放這個原因我沒有找到任何解決方案。電子郵件()函數也不安全,我gona使用phpmailer或swiftmailer(我傾向於後者)。