2009-11-03 6 views
9

Является ли их методом кодирования/декодирования HTML и URL-адреса (в Xcode с использованием Objective-C)?URL-кодирование и кодирование HTML NSStrings

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

Это не работает, как я ожидал. Я думал, что он преобразует специальные символы, такие как «<» в эквивалентные объекты HTML, т. Е. «<» в этом случае.

Вот ссылка на ссылку W3School по этой теме (общее):

HTML URL Encoding Reference

HTML Entities Reference

Поблагодарив в ожидании.

ответ

19

Возвращает представление приемника с использованием заданной кодировки для определения процентных экранов, необходимых для преобразования получателя в правовую строку URL-адреса.

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 

и

Возвращает новую строку, достигнутый путем замены в приемнике все процента сбегает с символами, соответствующими, как определено с помощью заданной кодировки.

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 
+1

Прочитайте другие ответы для методов, которые будут приводить строки в виде XML (т. Е. Замены сущностей и

11

Метод вы цитируете считывает файл с диска с заданной кодировкой символов (например, UTF-8 или ASCII). Это не имеет никакого отношения к экранированию URL или HTML.

Если вы хотите добавить URL процентов побегов, вы хотите, этот метод:

[myString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 

Убедитесь, что вы прочитали документацию по этому методу, потому что есть определенные тонкости, о том, что оно ускользает и то, что он оставляет в покое. В некоторых случаях вам, возможно, придется использовать более сложные, но более гибкие, CFURLCreateStringByAddingPercentEscapes(). (Если вы делаете, обратите внимание, что вы можете бросить CFStringRef в NSString * и наоборот.)

Там нет ничего построен в том, что я не знаю, чтобы сделать объект 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]; 
} 
+8

Вау, ваш код выглядит как официальный французский сад. –

+1

Если бы я писал это для своего собственного кода, я бы на самом деле определил метод -replaceOccurrencesOfString: withString: в категории в NSMutableString и использовал это, чтобы избежать повторения. (Я бы, вероятно, написал это как метод NSMutableString вместо функции, тоже подумал об этом.) Но я не хотел включать слишком много в это. –

+0

Проверьте ответ CocoaFu. Верно. –

3

для кодирования сущностей HTML/XML, вы можете использовать функцию CFMutableString:

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

установив последний параметр CFStringTransform истины, он должен работать для декодирования (шестнадцатеричных) объектов.

3

Использование CFStringTransform для HTML кодирования/декодирования объект:

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

Вы должны использовать ICU преобразование "Any-Hex/XML". kCFStringTransformToXMLHex недостаточно агрессивен.

+0

Какие типы объектов пропущены kCFStringTransformToXMLHex? –

+1

@StevenKramer Например,> или &. – fzwo

 Смежные вопросы

  • Нет связанных вопросов^_^