2012-06-17 42 views
3

我對$ _POST/$ _ REQUEST數據有些麻煩,它們看起來仍然是utf8_encoded。php收到的UTF-8數據沒有解碼

我送傳統的ajax post請求,在這些條件:

  • oXhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
  • 在HTML <header>標籤設置
  • js文件保存在UTF8-nobom格式
  • 元標籤
  • PHP文件保存在UTF-8-nobom格式下
  • encodeURIComponent被使用,但我試過沒有,它給出了相同的結果

好的,所以一切都很好:數據庫也在utf8中,並以這種方式接收它,頁面顯示良好。

但是,當我收到例如字符「º」(通過$_REQUEST$_POST),它的二進制表示形式爲11000010 10111010,而「º」在PHP硬編碼(UTF8 ...)二進制表示只有10111010

wtf?我只是不知道這是不是一件好事......例如,如果我使用「#º#」作爲explode php函數的分隔符,它將不會被檢測到,這實際上是導致問題的原因我在這。

任何幫助將像往常一樣非常感謝,非常感謝你的時間。 Best rgds。

EDIT1:校mb_check_encoding

if (mb_check_encoding($_REQUEST[$i], 'UTF-8')) { 
    raise("$_REQUEST is encoded properly in utf8 at index " . $i); 
} else { 
    raise(false); 
} 

編碼得到了證實,我有消息引發了正常。

+0

使用'mb_check_encoding()'檢查輸入時會發生什麼:http://www.php.net/manual/en/function.mb-check-encoding.php –

+2

單字節utf-8字符沒有位7(八位)如此設置'10111010'不是utf-8 – Musa

+0

@PhpMyCoder確認後,檢查編輯 – Sebas

回答

2

單字節utf-8字符沒有設置位7(8位),因此10111010不是utf-8,您的文件可能是用ISO-8859-1編碼的。

+0

謝謝,它導致我不檢查輸入,而是檢查「硬編碼」字符串的編碼。它不是utf-8,因爲它存儲在一個常量下,本身存儲在一個我認爲是編碼的包含文件中。 – Sebas