【问题标题】:Character Encoding Issue with XML and PHP file_get_contentsXML 和 PHP file_get_contents 的字符编码问题
【发布时间】:2013-02-19 19:06:47
【问题描述】:

我在使用 XML API 进行字符编码时遇到问题,似乎无法解决问题。我想知道是否有人会知道该怎么做。我尝试了以下代码,它们都产生了一些奇怪的字符编码问题。

密码 #1

$xml_url = "http://myurl.com/123.xml";
$xml = simplexml_load_file($xml_url);

密码 #2

$xml_url = "http://myurl.com/123.xml";
$contents = file_get_contents($xml_url);
$xml = new SimpleXMLElement($contents);

撇号等一些字符出来的方式是这样的

strengthening resumés

这有数百个错误。我的代码的顶部看起来像这样

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

我尝试将其删除并将其作为 HTML 5 放置,但我似乎什么也得不到。我尝试过其他拉丁字符编码等,但它变得越来越糟。有人对如何解决此问题有任何想法吗?

【问题讨论】:

    标签: character-encoding xml-parsing


    【解决方案1】:

    当 UTF-8 编码文本 é 被视为 ISO-8859-1 编码文本时,它显示为 é

    如果我没记错的话,SimpleXML 仅适用于 UTF-8 编码的数据。因此,如果您的数据不是 UTF-8,则您需要对您读入的所有文件以及添加到文档中的文本字符串进行编码(在对它们使用 SimpleXML 方法之前)。您可以使用iconv()utf8_encode() 进行转换。

    如果您的代码包含非 ASCII 文字,还要检查代码文件的编码。

    【讨论】:

    • 感谢您的回复。对于我缺乏关于字符编码的知识,我深表歉意,但我将在哪里使用 utf8_encode?它是在内部的实际 XML 值上(即 $xml->thisValue)还是在实际的 URL 本身上?
    • 好的。我似乎已经完成了一半。我能够使用 utf8_decode() 将 é 更改为 é,但是,当存储在 mysql 中时,还会出现其他带有撇号的编码问题: ’
    • @SamOh 这是同样的问题:用 UTF-8 编码的卷曲撇号在被视为 ISO-8859-1 文本时看起来像 ’。确保在连接到数据库时使用正确的编码设置。如有必要,对所有接收/存储到数据库的文本使用解码或编码功能。将所有内容(输入、输出、数据库、文件存储)保存为 Unicode 是避免字符集转换以及与之相关的问题的好方法。
    • 我尝试对 INSERT INTO 语句本身进行 utf8_encode 和解码,但没有成功。还尝试了实际文本,它仍然产生错误,这不是缓存问题。我不太确定为什么这种情况仍在发生。我想我只能忍受它。感谢您的帮助 jasso。
    猜你喜欢
    • 2013-01-29
    • 2014-03-18
    • 2011-04-04
    • 2010-10-23
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    相关资源
    最近更新 更多