سؤال

أرغب في إنشاء عنوان URL قادرا في تطبيق البريد الإلكتروني. المشكلة هي أن عنوان URL معلمات يكسر هذا بسبب "&" في عنوان URL. متغير الجسم أدناه هو خط المشكلة. كلا الإصدارين من "الجسم" غير صحيح. بمجرد فتح تطبيق البريد الإلكتروني، يتوقف النص في "... الرابط:". ما هو مطلوب لترميز ampersand؟

NSString *subject = @"This is a test";
NSString *encodedSubject = 
[subject stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

//NSString *body = @"This is a link: <a href='http://somewhere.com/two.woa/wa?id=000&param=0'>click me</a>"; //original
NSString *body = @"This is a link: <a href='http://somewhere.com/two.woa/wa?id=000&#38;param=0'>click me</a>"; //have also tried &amp;
NSString *encodedBody = 
[body stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString *formattedURL = [NSString stringWithFormat: @"mailto:myname@somedomain.com?subject=%@&body=%@", encodedSubject, encodedBody];
NSURL *url = [[NSURL alloc] initWithString:formattedURL];
[[UIApplication sharedApplication] openURL:url];
هل كانت مفيدة؟

المحلول

سيكون أمبيرساند٪ 26 لبير url ترميز المعايير

نصائح أخرى

لقد كنت تستخدم -[NSString gtm_stringByEscapingForURLArgument], ، والتي يتم توفيرها في جوجل Toolbox لنظام التشغيل Mac, ، وتحديدا في gtmnsstring + urlargums.h. و gtmnsstring + urlargums.m..

يمكنك استخدام تمثيل سداسي عشري للشخصية، في هذه الحالة٪ 26.

يمكنك ببساطة استخدام CFURLCreateStringByAddingPercentEscapes مع CFBridgingRelease بالنسبة قوس الدعم

NSString *subject = @"This is a test";
// Encode all the reserved characters, per RFC 3986
// (<http://www.ietf.org/rfc/rfc3986.txt>)
NSString *encodedSubject =
(NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                            (CFStringRef)subject,
                                            NULL,
                                            (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                            kCFStringEncodingUTF8));

انت تستخدم stringByAddingPercentEscapesUsingEncoding, ، تماما مثل كنت تفعل.

المشكلة هي أنك لا تستخدمه بما فيه الكفاية. التنسيق الذي تقوم بإدراج الجسم المشفر أيضا لديه أمبير، والتي لم تكن مشفرة. تك بالسلسلة غير المنصوص عليها بدلا من ذلك، وتشفيرها (باستخدام stringByAddingPercentEscapesUsingEncoding) سويا او معا.

<a href='http://somewhere.com/two.woa/wa?id=000&#38;param=0'>click me</a>

هو الصحيح، على الرغم من أنه "&" أكثر استخداما من "&" أو "،".

إذا كانت الطريقة "Stringbyaddingcepercentescapesusingencoding" تفعل ما تقوله على القصدير، فينبغي أن يعمل (*)، ولكن وثائق NSSTRING تبدو غير واضحة بعض الشيء يتم الضغط عليها بالضبط. تحقق ما تنتهي به الأمر، يجب أن يكون عنوان URL شيء مثل:

mailto:bob@example.com?subject=test&body=Link%3A%3Ca%20href%3D%22http%3A//example.com/script%3Fp1%3Da%26amp%3Bp2%3Db%22%3Elink%3C/a%3E

(*: modulo إخلاء المسؤولية المعتادة التي mailto: معلمات الارتباط مثل "الموضوع" و "الجسم" غير قياسي، ستفشل في العديد من المواقف، وينبغي تجنبها بشكل عام.)

بمجرد فتح تطبيق البريد الإلكتروني، يتوقف النص في "... الرابط:".

إذا كان "strandbyaddingcepercastescapesusingencoding" لا يهرب من "<" إلى "٪ 3C"، فقد تكون المشكلة. خلاف ذلك، قد لا يكون الأمر يتعلق بالكهرباء، ولكن تقييد المستوى المتعمد على المستوى لا يسمح "<'. كما ذكر سابقا،؟ الجسم = ... ليس ميزة موثوقة.

في أي حال، يجب ألا تتوقع البريد الإلكتروني التعرف على HTML وحاول إرسال بريد HTML؛ قليل جدا سوف يفعل ذلك.

مثال على استخدام٪ 26 بدلا من ودون هذه السمات وصلت في PHP كصفيف!

    var urlb='/tools/lister.php?type=101%26ID='+ID; // %26 instead of &
    window.location.href=urlb;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top