2011-08-25 153 views
10

這是一個大寫的A與^頂部:Â這個字符是什麼(Â)以及如何使用PHP刪除它?

它是表示從網頁拉串起來。它顯示原始站點上原始字符串中以前有空的空間。這是存儲在我的數據庫中的實際字符。當我回顯一個包含它的字符串時,它也顯示在我的網站上。

我意識到這是一個字符編碼問題,當我最初處理網頁,但我現在堅持與我的數據庫中的這些字符。在輸出包含它的html之前,我必須在顯示它時轉換這個字符,或者在php的其他地方轉換。我不能重新處理原始文件。

我試過str_replace()和html_entity_decode(),但都沒有做任何事情。

我還應該嘗試什麼?

+0

你不應該由str_replace函數刪除它們,你首先應該解決的編碼問題。看看這個:http://stackoverflow.com/search?q=mysql+encoding和這個http://stackoverflow.com/search?q=php+encoding –

回答

17

「拉丁1」 是你的問題在這裏。大約有65256個UTF-8字符可用於網頁,您無法在Latin-1代碼頁中存儲該字符。

爲立即解決問題,你應該能夠

$clean = str_replace(chr(194)," ",$dirty) 

不過,我會切換數據庫中使用UTF-8作爲儘快的問題幾乎肯定會再次發生。

+3

哦,不,還有**遠遠多於這些字符...... –

+0

Unicode代碼空間上升到U + 10FFFF,所以這是大約一百萬個代碼點,給出或採取一些非法的代碼點。 –

+0

這裏有一個有用的圖表來引用這樣的字符:http://www.ascii-code.com/ –

6

它並不是真正的一個字符,而且很可能是由於內容編碼和瀏覽器編碼之間的錯位導致的。嘗試將輸出頁面的編碼設置爲您正在使用的內容。

例如在部分,輸出:

echo "<META http-equiv='Content-Type' content='text/html; charset=UTF-8'>"; 

(調整UTF-8,無論你正在使用)

+0

+1 - 這是一個問題,需要修復根本原因(雖然只是改變標題可能不會完全削減它,這取決於具體情況) –

+0

這是存儲在我的數據庫中的實際字符。這是否改變了這種狀況?我的數據庫編碼是拉丁語1(默認)。我對編碼問題不是很熟悉。 –

+1

哦,是的,對不起,我沒有仔細閱讀這個問題。在這種情況下,在從另一個站點獲取數據之後,您需要檢測其編碼並在存儲它們之前將其轉換爲數據庫的編碼。通常這是通過解析標題來完成的,但取決於您抓取的網站,它可能會變得複雜。 – Sheepy

0

使用貝婁代碼

echo "<META http-equiv='Content-Type' content='text/html; charset=UTF-8'>"; 
echo htmlspecialchars_decode($your_string, ENT_QUOTES); 
0

我用這一個很多

function cleanStr($value){ 
    $value = str_replace('Â', '', $value); 
    $value = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $value); 
    return $value; 
} 
0

在您的網頁使用不同的字符集時,會出現此問題。

爲了解決這個問題(使用UTF-8中的例子):

在你的頁面的<HEAD>添加charset

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

在任何形式提交補充accept-charset

<form name="..." method=".." id=".." accept-charset="utf-8"> 

如果您使用php + MySQLi來處理您的表單,您應該確保數據庫連接也支持您的字符集。程序風格:

mysqli_set_charset($link, "utf8"); 

和麪向對象的風格:

$mysqli->set_charset("utf8") 
2

這個工作對我來說:

$string = "Sentence ‘not-critical’ and \n sorting ‘not-critical’ or this \r and some ‘not-critical’ more. ' ! -."; 
$output = preg_replace('/[^(\x20-\x7F)\x0A\x0D]*/','', $string); 
+1

不要使用西里爾文 –

相關問題