Экранирование персонажей в Objective C на iPhone - PullRequest
3 голосов
/ 10 марта 2010

Я пытаюсь передать следующую строку:

NSString* jsString = [NSString stringWithFormat:@"myFunc(\"%@\");", myParameter];

из Objective C в JavaScript с использованием строкиByEvaluatingJavaScriptFromString, где myParameter является строковым значением. Как я могу убедиться, что строка myParameter не содержит JS-небезопасных символов без надлежащего экранирования?

например. следующая строка может испортить ситуацию:

parameter");alert('scam');

Строка myParameter будет именем контакта из адресной книги, что сделает возможным ввод вышеуказанной строки.

Ответы [ 2 ]

2 голосов
/ 10 марта 2010

Вы можете заменить каждый " на \":

NSString* filteredParam = [myParameter stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"];
NSString* filteredParam = [filteredParam stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
0 голосов
/ 10 марта 2010

В зависимости от ваших требований к использованию вы можете использовать «шаблонный» подход:

#define JSTemplateCodeKey @"##JS_CODE_HERE##"

// define template (or read it from file, ect...)
NSString *jsTemplate = @"myFunc(\"" JSTemplateCodeKey "\");";

// replace the placeholder in your template with your param
NSString *jsString = [jsTemplate stringByReplacingOccurrencesOfString:JSTemplateCodeKey withString:myParameter];
...