0

私はphpファイルから(XMLとして)データを取得するプロジェクトを開発しています。より明確にするために、アプリは次のように機能します:

1-次のコードを使用して、HTTP 要求を PHP ファイルに送信します。これにより、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>

この部分は正常に動作しており、すべてのタイプの文字が Web ブラウザーに適切に表示されます。2 番目のステップは、これらのデータを 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 ファイルの文字列の 1 つに特別な文字 (´、^、˜、- など) が含まれている場合、アプリが動作しないままになることです。文字列のエンコーディング!誰かがこの問題を解決する方法を知っていますか?

注: XML ファイルからフェッチされた値は、msgError(NSMutableString) に保存されます。前もって感謝します!

4

1 に答える 1

0

これは、グラフィック文字コーディング (1 バイト) を含む html を返していることをクライアントに伝えます。

header("Content-Type: text/html; charset=ISO-8859-1",true);

代わりに「Content-Type: text/xml; charset=UTF-8」を使用してください

そして、文字列を出力するときにphpで文字列をUTF8としてエンコードします(おそらくutf8_encodeを使用します)。

于 2012-05-20T05:20:33.677 に答える