2012-07-19 61 views
1

我只是想更好地理解字符編碼,所以我正在做一些測試。字符編碼失敗,爲什麼 xBD在PHP + HTML中顯示不正確

我也沒有保存爲UTF-8,看起來像這樣的PHP文件:

<?php 
declare(encoding='UTF-8'); 

header('Content-type: text/html; charset=utf-8'); 
?><!DOCTYPE html> 

<html> 

<head> 
    <meta charset="UTF-8" /> 
    <title>Test</title> 
</head> 

<body> 
    <?php echo "\xBD"; # Does not work ?> 
    <?php echo htmlentities("\xBD") ; # Works ?> 
</body> 

</html> 

頁面本身就說明這一點:

enter image description here

問題的要點是,我的Web應用程序有一堆字符編碼問題,人們從Outlook或Word中複製和粘貼,並將字符轉換爲鑽石問號(這些問號是否有真實姓名?)

我試圖學習如何確保當頁面加載時(基本上$_GET,$_POST$_REQUEST),所有輸入都轉換爲UTF-8,並且所有輸出都使用正確的UTF-8處理方法完成。


我的問題是:爲什麼我的頁面表示第一回波的問號,沒有任何人有關於PHP製作UTF-8安全的web應用程序的任何其他信息?

回答

3

0xBD不是有效的UTF-8。如果你想用UTF-8編碼「½」,那麼你需要使用0xC2 0xBD。

>>> print '\xc2\xbd'.decode('utf-8') 
½ 

如果你想(在這種情況下的Latin-1)使用的文本來自另一個字符集,那麼你需要先使用各種的iconv或MB功能將其轉碼爲UTF-8。

另外:

$ charinfo � 
U+FFFD REPLACEMENT CHARACTER 
1

\xBD是無效的UTF8你想要的是\xC2\xBD,問號的事情是什麼應用程序替換爲無效代碼點,所以如果你看到在你的UTF8文本其要麼不utf8或損壞。

相關問題