編輯:php刪除/標識此符號
好吧我有一些數據(大量的數據)從MySQL數據庫表中取出,沒有什麼特別的數據輸入方式。解析數據並將其重新顯示到Firefox時,此符號會顯示出來。當我將它與數據庫條目進行比較時,它看起來像一個空間(沒什麼特別的)。我正在使用所有默認的PHP/MySQL設置。
做一個var_dump或print_r也沒有幫助。
有什麼想法?
的符號:
UPDATE:
好吧,我確實發現導致問題的
人物 -
不要與
混淆 -
(連字符)。
編輯:php刪除/標識此符號
好吧我有一些數據(大量的數據)從MySQL數據庫表中取出,沒有什麼特別的數據輸入方式。解析數據並將其重新顯示到Firefox時,此符號會顯示出來。當我將它與數據庫條目進行比較時,它看起來像一個空間(沒什麼特別的)。我正在使用所有默認的PHP/MySQL設置。
做一個var_dump或print_r也沒有幫助。
有什麼想法?
的符號:
UPDATE:
好吧,我確實發現導致問題的
人物 -
不要與
混淆 -
(連字符)。
字符�
是REPLACEMENT CHARACTER (U+FFFD)。當有一個UTF碼中的錯誤它是用來:
未知的或不可表示FFFD替換字符
- 用於代替進入的字符,它的值是以Unicode
在大多數情況下,這意味着某些數據會使用UTF編碼進行解釋,而數據不是使用該編碼進行編碼,而是使用其他編碼進行編碼。
非常好,謝謝你的確認,但我該如何刪除它? str_replace和preg_match不起作用 – 2010-02-19 17:22:52
@Phill Pafford:這個字符表示你的字符編碼有問題。解決這個問題,你的角色應該正確顯示。 – Gumbo 2010-02-19 17:24:00
@gumbo超過100000條記錄,少於1%以這種方式顯示。我只是希望能夠驗證符號並從字符串中刪除,但目前爲止沒有任何工作,思路? – 2010-02-19 17:28:56
一個非常模糊的問題。不知何故,檢查你的網站的編碼,你的數據庫的數據編碼等等。
編輯:這是一個答案,因爲缺陷是DB數據編碼(可能在utf-8)和webapp編碼(可能在iso-8859-1)之間不匹配。因此,該解決方案通過以下任一方式進行:
1.)備份並擦除數據庫,然後使用正確的編碼加載它 2.)更改webapp的編碼,以便正確顯示字符。
問候,
這意味着一個字符,不可用在設置的當前字體的字符。一旦你找到它來自哪裏,你就需要用HTML實體對它進行編碼。
該字符表示存在您的瀏覽器不知道如何顯示的代碼點。某處您將字符值設置爲正常可打印字符範圍之外的內容,並且您的瀏覽器通過顯示標準「未知」字符來告訴您。
解決問題的唯一方法是找到將無效字符放入字符串中的錯誤。
你在說什麼?你在哪裏看到這個?如果它在瀏覽器上的呈現頁面上,那麼你可能已經用不正確的編碼保存了該文件。保存頁面/源文件時使用UTF或unicode編碼。
將文本從Microsoft Office產品粘貼到HTML或數據庫時,這是一個常見問題。最大的違規者似乎是模特(你發現)和聰明的報價。我發現,當用戶堅持使用不兼容的文本編輯器時,我發現一種解決方案是先將它們粘貼到記事本之類的東西中,以去除專有符號。
顯然,最好的解決方案就是不要使用單詞作爲網頁顯示的文本數據。
添加只是爲了向未來的讀者提供一些信息。
問候, 的Jc
感謝這個解釋很多 – 2010-02-19 20:46:54
你可以看看的iconv()和MB_ *功能,如果你只是想清理數據。
其他地方觀察到的最可能的原因是您在字符編碼方面存在問題。在版本6之前,PHP並不擅長處理字符編碼(處理字節數組並將編碼問題留給開發人員處理)。
確保您使用與數據庫相同的字符編碼顯示頁面,並確保在將其粘貼之前將所有用戶輸入轉換爲相同的字符編碼(iconv()和mb_detect_encoding()將有所幫助)數據庫。
謝謝這很有趣,將不得不嘗試這個 – 2010-02-19 20:47:27
爲什麼不在JavaScript中針對Gumbo在呈現網頁後識別爲「...字符⋯...替換字符(U + FFFD)」的正則表達式 - 通過這種方式,您不必亂用數據庫(你似乎很不情願這麼做),並且任何小的性能損失都會被卸載到客戶端。
它就在那裏!去掉它!! – Jasarien 2010-02-19 17:12:13
@Jasarien你是一個有趣的人 – 2010-02-19 17:13:42
它可能是U + FFFC或U + FFFD,意思是你在某處有編碼問題? – jball 2010-02-19 17:14:25