0

以下のスニペットを使用して html 文字列を sqlite db に挿入しています。コードは正常に動作しますが、同じ html 文字列を取得して Web ビューに表示するとレンダリングされず、一部のデータが変更されています。挿入方法を教えてください。長い html 文字列を db に変換します。

const char *sql = "insert into article (art_id,sub_cat_id,art_title,art_details) Values(?, ?, ?, ?)";

                    if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
                        NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));

                    sqlite3_bind_text(addStmt, 1, [[tuser objectForKey:@"art_id"] UTF8String], -1, SQLITE_TRANSIENT);
                    sqlite3_bind_text(addStmt, 2, [[tuser objectForKey:@"sub_cat_id"] UTF8String], -1, SQLITE_TRANSIENT);
                    sqlite3_bind_text(addStmt, 3, [[tuser objectForKey:@"art_title"] UTF8String], -1, SQLITE_TRANSIENT);
                    sqlite3_bind_text(addStmt, 4, [[tuser objectForKey:@"art_details"] UTF8String], -1, SQLITE_TRANSIENT);


                    if(SQLITE_DONE != sqlite3_step(addStmt))
                        NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
                    else
                        //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid
                        //coffeeID = sqlite3_last_insert_rowid(database);

                        //Reset the add statement.
                        sqlite3_reset(addStmt);
4

1 に答える 1

3

一重引用符が問題を引き起こしている可能性があります。HTML であるため、一重引用符を & apos; に置き換えることができます。または、ここに示すように一重引用符を「二重化」して、sqlite で問題ないようにすることもできます。

    NSString *artdetails = [tuser objectForKey:@"art_details"];
    NSString *arttitle = [tuser objectForKey:@"art_title"];

    NSString *ad = [artdetails stringByReplacingOccurrencesOfString:@"'" withString:@"''"];    
    NSString *at = [arttitle stringByReplacingOccurrencesOfString:@"'" withString:@"''"];

...

    sqlite3_bind_text(addStmt, 3, [at UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(addStmt, 4, [ad UTF8String], -1, SQLITE_TRANSIENT);

于 2012-08-23T17:36:14.490 に答える