2010-02-19 85 views
4

編輯:php刪除/標識此符號

好吧我有一些數據(大量的數據)從MySQL數據庫表中取出,沒有什麼特別的數據輸入方式。解析數據並將其重新顯示到Firefox時,此符號會顯示出來。當我將它與數據庫條目進行比較時,它看起來像一個空間(沒什麼特別的)。我正在使用所有默認的PHP/MySQL設置。

做一個var_dump或print_r也沒有幫助。

有什麼想法?

的符號:

UPDATE:

好吧,我確實發現導致問題的

人物 -

不要與

混淆 -

(連字符)。

+16

它就在那裏!去掉它!! – Jasarien 2010-02-19 17:12:13

+0

@Jasarien你是一個有趣的人 – 2010-02-19 17:13:42

+1

它可能是U + FFFC或U + FFFD,意思是你在某處有編碼問題? – jball 2010-02-19 17:14:25

回答

12

字符REPLACEMENT CHARACTER (U+FFFD)。當有一個UTF碼中的錯誤它是用來:

FFFD替換字符

  • 用於代替進入的字符,它的值是以Unicode
未知的或不可表示

在大多數情況下,這意味着某些數據會使用UTF編碼進行解釋,而數據不是使用該編碼進行編碼,而是使用其他編碼進行編碼。

+0

非常好,謝謝你的確認,但我該如何刪除它? str_replace和preg_match不起作用 – 2010-02-19 17:22:52

+1

@Phill Pafford:這個字符表示你的字符編碼有問題。解決這個問題,你的角色應該正確顯示。 – Gumbo 2010-02-19 17:24:00

+1

@gumbo超過100000條記錄,少於1%以這種方式顯示。我只是希望能夠驗證符號並從字符串中刪除,但目前爲止沒有任何工作,思路? – 2010-02-19 17:28:56

0

一個非常模糊的問題。不知何故,檢查你的網站的編碼,你的數據庫的數據編碼等等。

編輯:這是一個答案,因爲缺陷是DB數據編碼(可能在utf-8)和webapp編碼(可能在iso-8859-1)之間不匹配。因此,該解決方案通過以下任一方式進行:

1.)備份並擦除數據庫,然後使用正確的編碼加載它 2.)更改webapp的編碼,以便正確顯示字符。

問候,

+1

沒有答案。你應該評論。 – Layke 2010-02-19 17:18:04

+0

@edit超過100000條記錄,少於1%以這種方式顯示。我只是想能夠驗證符號和刪除是從字符串,但沒有任何工作到目前爲止 – 2010-02-19 17:27:20

+1

你可能不會找到它。作爲Gumbo的州,它是您的瀏覽器使用的替代字符,用來指出一個它無法理解的字符的問題。因此,用錯誤標識具體數據並在數據庫中獲取。檢查它的保存方式 – Alfabravo 2010-02-19 17:36:15

1

這意味着一個字符,不可用在設置的當前字體的字符。一旦你找到它來自哪裏,你就需要用HTML實體對它進行編碼。

1

該字符表示存在您的瀏覽器不知道如何顯示的代碼點。某處您將字符值設置爲正常可打印字符範圍之外的內容,並且您的瀏覽器通過顯示標準「未知」字符來告訴您。

解決問題的唯一方法是找到將無效字符放入字符串中的錯誤。

0

你在說什麼?你在哪裏看到這個?如果它在瀏覽器上的呈現頁面上,那麼你可能已經用不正確的編碼保存了該文件。保存頁面/源文件時使用UTF或unicode編碼。

1

將文本從Microsoft Office產品粘貼到HTML或數據庫時,這是一個常見問題。最大的違規者似乎是模特(你發現)和聰明的報價。我發現,當用戶堅持使用不兼容的文本編輯器時,我發現一種解決方案是先將它們粘貼到記事本之類的東西中,以去除專有符號。

顯然,最好的解決方案就是不要使用單詞作爲網頁顯示的文本數據。

添加只是爲了向未來的讀者提供一些信息。

問候, 的Jc

+0

感謝這個解釋很多 – 2010-02-19 20:46:54

1

你可以看看的iconv()和MB_ *功能,如果你只是想清理數據。

其他地方觀察到的最可能的原因是您在字符編碼方面存在問題。在版本6之前,PHP並不擅長處理字符編碼(處理字節數組並將編碼問題留給開發人員處理)。

確保您使用與數據庫相同的字符編碼顯示頁面,並確保在將其粘貼之前將所有用戶輸入轉換爲相同的字符編碼(iconv()和mb_detect_encoding()將有所幫助)數據庫。

+0

謝謝這很有趣,將不得不嘗試這個 – 2010-02-19 20:47:27

0

爲什麼不在JavaScript中針對Gumbo在呈現網頁後識別爲「...字符⋯...替換字符(U + FFFD)」的正則表達式 - 通過這種方式,您不必亂用數據庫(你似乎很不情願這麼做),並且任何小的性能損失都會被卸載到客戶端。