2013-04-04 80 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