2013-04-04 79 views
1

我想從該字符串中刪除丹麥語中的問號。丹麥字符替換爲問號

...mest i betydningen moralsk ford�rvelse eller bestikkelighed, men ogs� i... 

我試圖utf8_encode()其返回以下內容:

...mest i betydningen moralsk ford�rvelse eller bestikkelighed, men ogs� i... 

第一個字符串是我在Web服務的XML得到了響應。有沒有辦法從我身邊解決這個問題?

+1

什麼是輸入編碼(通常是「ISO-8859-1」或「UTF-8」),您希望輸出編碼是什麼? – Halcyon 2013-04-04 15:07:01

+0

使用UTF-8編碼。 – Mido 2013-04-04 15:07:29

+0

嘿Mido我不是在調用utf8_encode嗎? – 2013-04-04 15:08:28

回答

4

您可以使用

header('Content-type: text/html; charset=utf-8'); 

設置字符編碼成UTF -8在你的頁面中。

除了確保你告訴你正在使用UTF-8的瀏覽器,它添加到您的代碼:

<head> 
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
<!-- rest of code here --> 
</head> 

還記得,它也取決於當該數據是來自上。檢查數據庫的編碼是否從數據庫中取出。

+2

也可能值得注意的是,如果不使用正確的字符集,數據庫查詢也可能導致重疊的字符。例如。在MySQL'SET NAMES UTF8;'可能需要根據設置。 – 2013-04-04 15:25:33

+0

準確地說,+1。 – Mido 2013-04-04 15:27:02

+0

所以@Mido所以你說的是,這個問題可能是在獲取數據(db查詢)?我嘗試了頭文件函數,並沒有解決它。 – 2013-04-05 07:24:04

1

您是否嘗試過調整你的頭,如下圖所示?我有同樣的問題,但是這將清除的東西

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
+0

Downvote?我爲什麼要問? – samayo 2013-04-04 15:09:34

2

檢查您的輸入輸出編碼。在大多數情況下,選擇UTF-8是最好的方法。

如果您的輸入在ISO-8859-1中,請使用utf8_encode()將其編碼爲UTF-8。如果它已經是UTF-8,再次調用utf8_encode()會搞砸了。

要將輸出指定爲UTF-8,請使用PHP中的header('Content-type: text/html; charset=utf-8');或HTML中的<meta charset="UTF-8" />

3

閱讀XML文件的encoding屬性,然後使用該編碼將其轉換爲您的網站正在使用的編碼。如果沒有編碼屬性,則默認爲UTF-8。如果步驟中產生的編碼與您網站使用的編碼相同,則不需要轉換。

$encoding_read_from_xml = "ISO-8859-1"; 
$encoding_my_website_uses = "UTF-8"; 
$xml_content = mb_convert_encoding($xml_content, $encoding_my_website_uses, $encoding_read_from_xml); 
4

,以避免這種問題,使用UTF-8對整個網站的最佳方式,這意味着:

  1. 編碼PHP文件本身爲UTF-8,這樣做通過您的編輯器/ IDE。
  2. 將元標記添加到頁面,例如對於HTML5爲<meta charset="UTF-8">
  3. 也許最重要的一點是:在進行查詢之前將數據庫連接對象的字符集設置爲UTF-8,對於mysqli,您可以調用$mysqli->set_charset('utf8')

當您遵循這些要點時,您將不必在不同的編碼之間轉換任何數據。更多信息和例子,你可以在這篇小文章中找到​​。

+0

這隻適用於內部數據,他從別人那裏得到的數據可以用任何編碼方式 – Esailija 2013-04-05 16:06:11

+0

@Esailija - 你說得對,我忽略了數據來自於web服務。如果OP不能改變服務的行爲,那麼你的答案將是適當的,否則我建議讓服務提供UTF-8。 +1爲您的答案。 – martinstoeckli 2013-04-06 10:19:16

+0

剛剛發生在我身上。 OP在他的頁面上看到了unicode替換字符,並且只有使用unicode解碼才能看到該字符。然後他調用'utf8_encode()',當頁面被解釋爲UTF-8並且被編碼的字符字面上是'?'時,這會導致'�'。所以如果這是直接來自源的,並且op只是對其調用'utf8_encode',那麼**原始源必須從字面上**具有字符' '並且對於他來說是不可恢復的。 tl; dr:一切都是正確的utf-8,但字符從字面上看就是「 」。 – Esailija 2013-04-06 11:28:34