- From: Bert Bos <bbos@mygale.inria.fr>
- Date: Mon, 9 Sep 1996 14:35:41 +0200 (MET DST)
- To: jrd@netcom.com
- Cc: www-style@w3.org
Jon Degenhardt writes: > A minor syntax question: What are the legal ways specify urls containing > right > parentheses? Right parentheses are "safe" characters in urls and don't > need > to encoded, but they are also the termination character in style sheet > url > references. > > My guess is that unencoded right parens would be legal in quoted urls, > and > illegal in unquoted urls. For example: > > Legal: BODY { background: url("right)paren.gif") } > Legal: BODY { background: url('right)paren.gif') } > Illegal: BODY { background: url(right)paren.gif) } > > However, this isn't clear to me from the style sheet specs. The lex > grammar > in Appendix B of 7/26/96 CSS-1 Working Draft doesn't handle any of these > cases. > This suggests all three forms may be illegal. The lex form from the > draft is: > > "url("[^\n)]+")" {yylval.str = noquotes(yytext+3); return > URL;} > > This terminates the url at the first right paren, in a quoted string or > not. Good point. The Lex expression is indeed wrong. The safe way to use a literal parenthesis, in a URL or elsewhere, is to escape it with a backslash. Section 7.2 ("parsing conventions") explains that any character can be escaped with a backslash to remove its special meaning. The way to write the URL is thus: BODY { background: url(right\)paren.gif) } and the Lex rule should be: "url("([^\n)]|{escape})+")" I must admit we didn't think of putting quotes around URLs that are already inside parentheses. Quotes do remove the special meaning of parentheses, so maybe we should indeed allow BODY { background: url("right)paren.gif") } BODY { background: url('right)paren.gif') } as well. Have to think about that one... Bert -- Bert Bos ( W 3 C ) http://www.w3.org/ http://www.w3.org/pub/WWW/People/Bos/ INRIA/W3C bert@w3.org 2004 Rt des Lucioles / BP 93 +33 93 65 77 71 06902 Sophia Antipolis Cedex, France
Received on Monday, 9 September 1996 08:36:11 UTC