From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: Links with description and '%3f' in URL fail Date: Thu, 4 Mar 2010 21:51:42 +0100 Message-ID: <87747619-BC0E-4E20-B8B1-835EB81FE56A@gmail.com> References: <20100304170052.734@usenet.piggo.com> Mime-Version: 1.0 (Apple Message framework v936) Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NnI1N-0005Hh-8A for emacs-orgmode@gnu.org; Thu, 04 Mar 2010 15:51:49 -0500 Received: from [140.186.70.92] (port=56905 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NnI1K-0005H8-MP for emacs-orgmode@gnu.org; Thu, 04 Mar 2010 15:51:48 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1NnI1J-0000VL-4c for emacs-orgmode@gnu.org; Thu, 04 Mar 2010 15:51:46 -0500 Received: from mail-ew0-f222.google.com ([209.85.219.222]:33638) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1NnI1I-0000VB-UG for emacs-orgmode@gnu.org; Thu, 04 Mar 2010 15:51:45 -0500 Received: by ewy22 with SMTP id 22so2435789ewy.26 for ; Thu, 04 Mar 2010 12:51:44 -0800 (PST) In-Reply-To: <20100304170052.734@usenet.piggo.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Sebastien Delafond Cc: emacs-orgmode@gnu.org Hi Sebastian, could you please try if the following patch does solve this issue? Thanks. - Carsten diff --git a/lisp/org.el b/lisp/org.el index 85b74fa..59d2acf 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -7950,12 +7950,14 @@ This is the list that is used before handing over to the browser.") (url-unhex-string text) (setq table (or table org-link-escape-chars)) (when text - (let ((re (mapconcat (lambda (x) (regexp-quote (cdr x))) + (let ((case-fold-search t) + (re (mapconcat (lambda (x) (regexp-quote (downcase (cdr x)))) table "\\|"))) (while (string-match re text) (setq text (replace-match - (char-to-string (car (rassoc (match-string 0 text) table))) + (char-to-string (car (rassoc (upcase (match-string 0 text)) + table))) t t text))) text)))) On Mar 4, 2010, at 5:06 PM, Sebastien Delafond wrote: > Quoting from debian bug report #572404[0]: > > This error is quite esoteric. Creating a link with a '%3f' escape > sequence in its URL (at least HTTP ones) makes it fail to be edited > with C-c C-l and exported with the error: > > org-link-unescape: Wrong type argument: characterp, nil > > But only if the link has a description. Other escape sequences like > '%3e' or '%40' or even the literal '?' corresponding to character > 0x3f > don't trigger the error. For instance: > > - http://www.example.com/x%3fx doesn't trigger the error > - [[http://www.example.com/x%3fx][test]] triggers the error > - [[http://www.example.com/x%3ex][test]] doesn't trigger the error > - [[http://www.example.com/x?x][test]] doesn't trigger the error > > Even more strange, while '%3f' reveals the error, '%3F' does not. I > guess the ``org-link-unescape`` function has some serious problems > with the handling of '?': when using '%3F' in an HTTP URL, it is > unescaped when exported to HTML, resulting most of the time in > invalid > URLs, since the '?' character separates the path from query > arguments. > > For instance, in "http://x.org/what%3F" the '%3F' should be left as > is > instead of being exported as "http://x.org/what?". In > "http://x.org/query?foo=bar", the '?' should also be left as is. > > Here it's better to trust the user and leave URLs untouched than > trying to be too smart. > > It at least sounds a like strange that it'd behave diffrently > depending > on whether or not there is a description alongside the link... > > Cheers, > > --Seb > > [0] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=572404 > > > > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode - Carsten