Это код в php, основанный на ваших кодах:
<?php
$x = 3;
$dimension = (2 * $x) -1 ;
$center = floor($dimension/2);
for($i = 1; $i <= $dimension; $i++)
{
for($j = 1; $j <= $dimension; $j++)
{
$dist = ($center - $i) * ($center - $i) + ($center - $j) * ($center - $j);
$result = floor(sqrt($dist)) + 1;
echo "(" . $i . ", " . $j . ")" . " = " . $result . "</br>";
}
}
?>
Он не дает мне тот же результат, что и вывод.
-stringByAddingPercentEscapesUsingEncoding:
не выполняет полное кодирование Escape. Необходимо вручную добавить использование кодировки -replaceOccurrencesOfString:withString:
Вот полный список (зеркально отражающий список Gamecat), как первоначально предложено в https://devforums.apple.com/message/15674#15674. Как Nick указывает, это дорого, так просто не включайте полный список, не рассматривая Ваших реальных требований для выхода.
NSMutableString *escaped = [actionString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[escaped replaceOccurrencesOfString:@"$" withString:@"%24" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"&" withString:@"%26" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"+" withString:@"%2B" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"," withString:@"%2C" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"/" withString:@"%2F" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@":" withString:@"%3A" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@";" withString:@"%3B" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"=" withString:@"%3D" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"?" withString:@"%3F" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"@" withString:@"%40" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@" " withString:@"%20" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"\t" withString:@"%09" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"#" withString:@"%23" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"<" withString:@"%3C" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@">" withString:@"%3E" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"\"" withString:@"%22" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"\n" withString:@"%0A" options:NSCaseInsensitiveSearch range:wholeString];
Этот код, конечно, напортачил в Вашем URL.
Используйте %26 в качестве Escape URL.
Другие Escape:
$ %24
& %26
+ %2B
, %2C
/ %2F
: %3A
; %3B
= %3D
? %3F
@ %40
В URL амперсанд является защищенным ключевым словом, показывающим включение querystring переменной. Вы не можете вставить его как часть самого значения. Необходимо изменить его на что-то еще.
Вот ссылка на тот же вопрос, который задают на StackOverflow: ASP.NET Амперсанд URLEncode для использования в Строке запроса
Или даже короче:
@implementation NSString (Escaping)
- (NSString*)stringWithPercentEscape {
return [(NSString *) CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)[[self mutableCopy] autorelease],
NULL,
CFSTR("=,!$&'()*+;@?\n\"<>#\t :/"),
kCFStringEncodingUTF8) autorelease];
}
@end
И здесь он снова в виде встроенной вспомогательной функции, соответствующей ARC:
#if __has_feature(objc_arc)
static inline NSString *hxURLEscape(NSString *v) {
static CFStringRef _hxURLEscapeChars = CFSTR("=,!$&'()*+;@?\r\n\"<>#\t :/");
return ((__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge CFStringRef)[v mutableCopy],
NULL,
_hxURLEscapeChars,
kCFStringEncodingUTF8));
}
#endif