【发布时间】:2014-10-09 20:21:45
【问题描述】:
好的,我还有一个问题,然后我认为我的程序的 PHP 部分将准备好摇滚。感谢大家迄今为止对我的帮助!
我将以下 PHP 文件上传到网站,作为我的应用程序的 Web 服务,以从 MySQL 数据库中检索数据并以 XML 的形式返回我的应用程序中需要的内容。我认为它的格式正确并且是我想要的(尽管当然欢迎任何和所有输入)。我会在 sn-p 之后解决我遇到的问题。
要查看输出,只需 cURL 这个 URL(它与我在 NSURL 中调用的 URL 相同): http://jeffstockdale.com/API/get_blog_posts.php
PHP 文件如下所示
<?php
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_select_db(DB_NAME);
$sql = "SELECT post_date_gmt, post_content, post_title FROM schema.wp_posts WHERE post_status = \"publish\" && post_type = \"post\" ORDER BY post_date_gmt DESC;";
$res = mysql_query($sql);
$xml = new XMLWriter();
$xml->openURI("php://output");
$xml->startDocument();
$xml->setIndent(true);
$xml->startElement('BlogPosts');
while ($row = mysql_fetch_assoc($res)) {
$xml->startElement("Post");
$xml->startElement("PostTitle");
$xml->text($row['post_title']);
$xml->endElement();
$xml->startElement("PostDate");
$xml->text($row['post_date_gmt']);
$xml->endElement();
$xml->startElement("PostContent");
$xml->writeCData($row['post_content']);
$xml->endElement();
$xml->endElement();
}
$xml->endElement();
header('Content-type: text/html; charset=utf-8');
$xml->flush();
?>
现在来解决问题。我进入我的 Xcode 项目,创建一个 NSURL(文件正确下载)并将其交给我的 NSXMLParser,然后它从 parseErrorOccurred 给我以下错误:
2014-10-09 15:03:41.114 AppName[8667:521529] NSXMLParser 遇到错误:错误域=NSXMLParserErrorDomain Code=9“操作无法完成。(NSXMLParserErrorDomain 错误 9.)”UserInfo=0x7fbddd0b1a10 {NSXMLParserErrorColumn=44, NSXMLParserErrorLineNumber=1352, NSXMLParserErrorMessage=输入不是正确的 UTF-8,表示编码! 字节:0x85 0x3C 0x2F 0x50 }
我认为这是因为我的 PHP 文件在需要 UTF-8 格式时以 ASCII 格式返回它的数据。所以我的问题是,我如何让它输出到 UTF-8 以便 NSXMLParser 可以解析它?
【问题讨论】:
-
那绝对不是 ASCII。对于它的价值,ASCII 会被接受为 UTF-8。
-
你知道为什么它会给我这个错误吗?
-
你检查过数据库连接编码是utf-8吗?
-
ThW 根据您的问题,我查看了 MySQL Workbench 并确认数据库正在编码 UTF-8。
-
@Kirkland:这只是您的数据库、表和列可能设置的元数据。这并不意味着所有数据都是 UTF-8 编码的。 NSXML 告诉你它不是。最好在传递 XML 之前检查它。
标签: php xml utf-8 ascii nsxmlparser