我正在开发一个从php文件中获取数据的项目(作为XML)。更明显的是,这个应用程序是这样的:
1 - 向PHP文件发送HTTP请求,该文件使用以下代码从mysql数据库中选择数据并将其显示为XML:
<?php
header("Content-Type: text/html; charset=ISO-8859-1",true);
echo(utf8_decode($xml->title));
$connect = mysql_connect("XX.XX.com", "XXX", "XXX") or die(mysql_error());
mysql_select_db("XXX") or die(mysql_error());
$id_get = $_GET['id'];
$selectData = "SELECT * FROM teste_xml_accentuation WHERE id = '$id_get' ";
$selectedData = mysql_query($selectData);
?>
<chat>
<?php while ($row = mysql_fetch_assoc($selectedData)) { $id = $row['id']; $added = $row['added']; $text = $row['text']; ?>
<teste added="<?php echo"$added"; ?>" id="<?php echo"$id"; ?>">
<id> <?php echo"$id"; ?> </id>
<added> <?php echo"$added"; ?> </added>
<text> <?php echo"$text"; ?> </text>
</teste>
<?php } ?>
</chat>
这部分工作正常,每种类型的字符都在我的网页浏览器中很好地显示。现在第二步是将这些数据提供给我的iOS应用程序,为此我使用下面的代码:
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ( [elementName isEqualToString:@"teste"] ) {
msgAdded = [[attributeDict objectForKey:@"added"] retain];
msgId = [[attributeDict objectForKey:@"id"] intValue];
msgIDEN = [[NSMutableString alloc] init];
msgError = [[NSMutableString alloc] init];
inIDEN = NO;
inError = NO;
}
if ( [elementName isEqualToString:@"id"] ) { inIDEN = YES; }
if ( [elementName isEqualToString:@"text"] ) { inError = YES; }
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if ( inIDEN ) { [msgIDEN appendString:string]; }
if ( inError ) { [msgError appendString:string]; }
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ( [elementName isEqualToString:@"teste"] ) {
[messages addObject:[NSDictionary dictionaryWithObjectsAndKeys:msgIDEN,@"id",msgAdded,@"added",msgError,@"text",msgErroNSS,@"text",nil]];
[[messages reverseObjectEnumerator] allObjects];
lastId = msgId;
[msgAdded release];
[msgErroNSS release];
[msgError release];
NSLog(msgErroNSS);
NSLog(msgError);
NSLog(msgAdded);
NSLog(@"Magalhães");
}
if ( [elementName isEqualToString:@"id"] ) { inIDEN = NO;}
if ( [elementName isEqualToString:@"text"] ) { inError = NO;}
}
同样一切都运行良好,但问题是,如果XML文件中的一个字符串包含任何特殊字符(例如:',〜, - ),则应用程序保持不变。我只能假设问题是关于字符串编码!有人知道如何解决这个问题吗?
注意:从XML文件获取的值存储在msgError(NSMutableString)中。 提前谢谢!
答案 0 :(得分:0)
这告诉客户端你正在返回带有图形字符编码的html(单字节):
header("Content-Type: text/html; charset=ISO-8859-1",true);
而是使用“Content-Type:text / xml; charset = UTF-8”
并在输出时将字符串编码为php中的UTF8(大概使用utf8_encode)。