1

いろいろスレッドを見たのですが、正解が見つからなかったり、うまくいかなかったり… 腹立たしいです^^.

私は非常に多くのことを試しましたが、どれも適切に機能しませんでした。

私の問題はとても簡単です..だと思います;)

iPhone からテキストを php スクリプトに送信し、それを SQL データベースに保存したいと考えています。

まず、特殊文字が機能しません。" は &\quot; (\ :O なし) などになります。次に、iphone から php への絵文字は、たとえば 😠に変わります。

テキストをphpに送信するiPhoneコードは次のとおりです。

NSString *post = [[NSString alloc] initWithFormat:@"&action=messageAdd&text=%@"textField.text];
    NSData * postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
    NSString * postLength = [NSString stringWithFormat:@"%d",[postData length]];
    NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://xxxx.com/xx.php"]]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

そしてここでPHPファイルからのコード

header('Content-Type: text/html; charset=utf-8');
..
..
..
$text = htmlentities(trim(stripinput($_POST['text'])));

これにより、さまざまなバリエーションすべてと少し混乱します。誰かが私を正しい方向に導いてくれることを願っています。コードはいつでも大歓迎です:)

4

4 に答える 4

5

when you send the data string with emoji to your php page, you have to use this encoding:

NSData *data = [string dataUsingEncoding:NSNonLossyASCIIStringEncoding];

if you have to send a string of this data you can convert it in a string with:

NSString str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

so, you'll have a string like to \ucode instead of the smile.

When you receive the string from database to app, you can do:

NSString str = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];

And the fame is done. ;)

于 2013-10-21T10:30:26.423 に答える
0

同様の問題があり、次を使用してbase64でエンコードされたテキストの文字列を保存することにより、データベースを変更せずにMSSQLストア部分を解決しました。

+(NSString*) base64EncodeString:(NSString*)string {
    return [@"b64:" stringByAppendingString:[[string dataUsingEncoding:NSUTF32BigEndianStringEncoding] base64EncodedStringWithOptions:0]];
}

+(NSString*) base64DecodeString:(NSString*)string {
    if ([string hasPrefix:@"b64:"]) {
        string = [string substringFromIndex:4];
        string = [[NSString alloc] initWithData:[[NSData alloc] initWithBase64EncodedString:string options:0] encoding:NSUTF32BigEndianStringEncoding];
    }
    return string;
}

文字列の前に b64: を付けたので、コードはエンコードされていないテキストでも機能します。

思い通りに動作し、絵文字とマルチバイト文字を MS-SQL サーバーに保存し、データベースの照合を気にすることなく、IOS デバイスから取得できるようになりました。

これにより、単一引用符の問題も解決されます。

しかし!私もあなたと同じ問題で立ち往生しています。PHP サイトに絵文字と MB 文字を表示させたいと思っていました。

于 2016-09-15T09:23:06.577 に答える
0

絵文字について:

絵文字の問題は、エンコーディングの違いに起因する可能性があります (つまり、iPhone がテキストを送信するときに使用しているのと同じテキスト エンコーディングで php ページが表示されていないなど)。

引用について:

を呼び出すとhtmlentities()、html に相当する文字をその html に相当するものに具体的に変換しています。つまり、"に変換され"ます。

フラグを使用して、ENT_NOQUOTESこの関数で一重引用符と二重引用符を変換せずに残すことができます。

$text = htmlentities(trim(stripinput($_POST['text'])), ENT_NOQUOTES);

引用符がテキストで他の場所で行っていることに影響を与える場合、これは危険な場合があることに注意してください。引用符が html の適合方法を変更すると、ページへの文字列出力が奇妙にレンダリングされる可能性があり、データベース関連のコードで引用符を適切に考慮しないと、データベースの相互作用が影響を受ける可能性があります。

于 2013-10-02T18:18:36.373 に答える
-1

私はついに問題を解決しました!しかし、ここで新たな問題が..

データベースをutf8mb4に変更し、データベースへの接続後に呼び出しました

mysql_query("SET NAMES 'utf8mb4'");

データベースでは、絵文字は次のように表示されます

?

ただし、iOSデバイスでは絵文字として表示されます。

問題は、「?」をどのように表示できるかです。mysql データベースから私のウェブサイトへ?

于 2013-10-13T00:33:37.683 に答える