• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Problem with CFXMLCreateStringByEscapingEntities to replace special xml chars?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Problem with CFXMLCreateStringByEscapingEntities to replace special xml chars?


  • Subject: Re: Problem with CFXMLCreateStringByEscapingEntities to replace special xml chars?
  • From: Steven Kramer <email@hidden>
  • Date: Tue, 2 Nov 2004 13:46:42 +0100


Op 17-okt-04 om 6:58 heeft Benjamin Levy het volgende geschreven:

Hello,
I've used CFXMLCreateStringByUnescapingEntities before with no problems, but I'm getting a consistent but unexpected result with CFXMLCreateStringByEscapingEntities now that I'm using it for the first time. It seems that the returned string only includes up to the last replaced entity and cuts the rest of the string out and if there are no entities it returns an empty string.


NSString* a = @"one < two";
NSString* b = (NSString*)CFXMLCreateStringByEscapingEntities( kCFAllocatorDefault, (CFStringRef)a, NULL );
NSLog( @"String \"%@\" became \"%@\"", a, b );


Results in: String "one < two" became "one &lt;"

Not much comes up when searching for CFXMLCreateStringByEscapingEntities, but is this a known behavior and/or bug? Am I somehow doing something wrong here?


Benjamin,

I just checked the source for this function (in 10.3.5, <http://darwinsource.opendarwin.org/10.3.5/CF-299.31/Parsing.subproj/ CFXMLParser.c>) and it is indeed badly broken. You're better off writing a Cocoa replacement for now.

There are two problems:
1. the entities dictionary is ignored
2. you will get a correct substring up to and including the final entity, but not what comes after


The very crude, very slow and mostly untested code below at least fixes #2

Regards

   Steven

@implementation NSString (CBEscapeXMLEntities)

- (NSString*) escapedString
{
NSMutableString* escaped = [[self mutableCopy] autorelease];// really, really broken (NSString*) ::CFXMLCreateStringByEscapingEntities (nil, (CFStringRef) self, nil);
[escaped replaceOccurrencesOfString: @"&" withString: @"&amp;" options: 0 range: NSMakeRange (0, [escaped length])];
[escaped replaceOccurrencesOfString: @"<" withString: @"&lt;" options: 0 range: NSMakeRange (0, [escaped length])];
[escaped replaceOccurrencesOfString: @">" withString: @"&gt;" options: 0 range: NSMakeRange (0, [escaped length])];
[escaped replaceOccurrencesOfString: @"\"" withString: @"&quot;" options: 0 range: NSMakeRange (0, [escaped length])];
return [escaped copy];
}


@end

--
email@hidden
http://sprintteam.com/

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Prev by Date: How to check for afp connections?
  • Next by Date: observing a controller for changes
  • Previous by thread: Re: How to check for afp connections?
  • Next by thread: observing a controller for changes
  • Index(es):
    • Date
    • Thread