Как надежно преобразовать специальные символы, такие как £, в эквиваленты HTML, используя Какао? - PullRequest
4 голосов
/ 28 августа 2011

Я пытаюсь скормить Mail.app несколько простых HTML: списки, полужирный шрифт, курсив. Однако я заметил, что если я использую символы вроде £, то Mail.app просто ничего не показывает. Я понял, что мне нужно конвертировать в HTML-объекты, например £ (полный список здесь: http://www.w3schools.com/tags/ref_entities.asp).. У меня есть частичное решение, которое подходит для большинства символов, которые придумали мои пользователи, но это далеко не единственное исправление :

- (NSString*) makeValidHTML:(NSString*)str {
  str = [str stringByReplacingOccurrencesOfString:@"£" withString:@"£"];
  str = [str stringByReplacingOccurrencesOfString:@"¢" withString:@"¢"];
  str = [str stringByReplacingOccurrencesOfString:@"¥" withString:@"¥"];
  str = [str stringByReplacingOccurrencesOfString:@"©" withString:@"©"];
  str = [str stringByReplacingOccurrencesOfString:@"®" withString:@"®"];
  str = [str stringByReplacingOccurrencesOfString:@"°" withString:@"°"];
  str = [str stringByReplacingOccurrencesOfString:@"¿" withString:@"¿"];
  str = [str stringByReplacingOccurrencesOfString:@"¡" withString:@"¡"];
  str = [str stringByReplacingOccurrencesOfString:@"‘" withString:@"'"];
  str = [str stringByReplacingOccurrencesOfString:@"'" withString:@"'"];
  str = [str stringByReplacingOccurrencesOfString:@"&" withString:@"&"];
  str = [str stringByReplacingOccurrencesOfString:@"\"" withString:@"""];
  str = [str stringByReplacingOccurrencesOfString:@"“" withString:@"""];
  str = [str stringByReplacingOccurrencesOfString:@"<" withString:@"&lt;"];
  str = [str stringByReplacingOccurrencesOfString:@">" withString:@"&gt;"];
  return str;
}

Есть ли стандартный способ сделать это без перечисления всех возможных зарезервированных символов?

Ответы [ 2 ]

4 голосов
/ 28 августа 2011

Этот класс должен быть полезен для вас:
https://github.com/mwaterfall/MWFeedParser/blob/master/Classes/NSString+HTML.m

Ссылка получена из этого другого ответа SO:
Преобразование & в & в Objective-C

0 голосов
/ 28 августа 2011

Я думаю, что ваша главная проблема в том, что вы не кодируете и не декларируете свою HTML-страницу как UTF-8. Хотя некоторые из упомянутых вами сущностей являются подлинной проблемой и должны быть преобразованы, например > в &gt; (здесь поможет код @Joel Martinez, с которым вы связаны), такие вещи, как символ £, будут работать очень хорошо как таковые, при условии, что страница объявлена ​​и закодирована в формате Unicode, например UTF-8:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

...