9

HTMLとURLをエンコード/デコードする方法ですか(Xcodeで、Objective-Cを使用)?

[NSString stringWithContentsOfFile:<#(NSString *)path#> encoding:<#(NSStringEncoding)enc#> error:<#(NSError **)error#>]

これは私が期待したようには機能しないようです。「<」のような特殊文字を同等の HTML エンティティ、つまりこの場合は「<」に変換すると思いました。

このトピック (一般) に関連する w3school リンクへの参照は次のとおりです。

HTML URL エンコーディング リファレンス

HTML エンティティ リファレンス

期待して感謝します。

4

4 に答える 4

19

指定されたエンコーディングを使用して受信者の表現を返し、受信者を正当な URL 文字列に変換するために必要なパーセント エスケープを決定します。

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

受信側ですべてのパーセント エスケープを、指定されたエンコーディングで決定された一致する文字に置き換えることによって作成された新しい文字列を返します。

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
于 2009-11-03T14:21:39.567 に答える
11

あなたが引用する方法は、特定の文字エンコーディング(UTF-8やASCIIなど)でディスクからファイルを読み取ります。URL や HTML エスケープとは関係ありません。

URL パーセント エスケープを追加する場合は、次の方法が必要です。

[myString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

このメソッドに関するドキュメントを必ず読んでください。何をエスケープし、何をそのままにしておくかについて、特定の微妙な点があるからです。場合によっては、より複雑で柔軟なCFURLCreateStringByAddingPercentEscapes(). (そうする場合は、キャストできることに注意してくださいCFStringRefNSString *また、その逆も可能です。)

XML/HTML スタイルのエンティティ エスケープを実行するために私が知っていることは何も組み込まれていませんが、この関数は基本を処理する必要があります。

NSString * convertToXMLEntities(NSString * myString) {
    NSMutableString * temp = [myString mutableCopy];

    [temp replaceOccurrencesOfString:@"&"
                          withString:@"&amp;"
                             options:0
                               range:NSMakeRange(0, [temp length])];
    [temp replaceOccurrencesOfString:@"<"
                          withString:@"&lt;"
                             options:0
                               range:NSMakeRange(0, [temp length])];
    [temp replaceOccurrencesOfString:@">"
                          withString:@"&gt;"
                             options:0
                               range:NSMakeRange(0, [temp length])];
    [temp replaceOccurrencesOfString:@"\""
                          withString:@"&quot;"
                             options:0
                               range:NSMakeRange(0, [temp length])];
    [temp replaceOccurrencesOfString:@"'"
                          withString:@"&apos;"
                             options:0
                               range:NSMakeRange(0, [temp length])];

    return [temp autorelease];
}
于 2009-11-03T15:48:24.603 に答える
3

HTML / XMLエンティティのエンコードを行うには、CFMutableString関数を使用できます。

NSString *result = .....;
CFStringTransform((CFMutableStringRef)result, NULL, kCFStringTransformToXMLHex, false);

CFStringTransformの最後のパラメーターをtrueに設定すると、(16進)エンティティのデコードにも機能するはずです。

于 2010-09-28T21:03:07.040 に答える
3

CFStringTransformHTML エンティティのエンコード/デコードに使用します。

CFStringTransform((CFTypeRef)yourMutableString, NULL, CFSTR("Any-Hex/XML"), FALSE );

ICU 変換「Any-Hex/XML」を使用する必要があります。kCFStringTransformToXMLHex十分に攻撃的ではありません。

于 2011-12-22T01:24:18.153 に答える