X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/43013495bbc15530f7d59d7314dd54ac94419012..8f1d02decf81f9f3d1214516927a134339dc6eeb:/doc/bugs/pagespec_can__39__t_match___123__curly__125___braces.mdwn diff --git a/doc/bugs/pagespec_can__39__t_match___123__curly__125___braces.mdwn b/doc/bugs/pagespec_can__39__t_match___123__curly__125___braces.mdwn index 263950a1d..2f215d297 100644 --- a/doc/bugs/pagespec_can__39__t_match___123__curly__125___braces.mdwn +++ b/doc/bugs/pagespec_can__39__t_match___123__curly__125___braces.mdwn @@ -1,9 +1,42 @@ I want match pages which have actually curly braces in the names (like this one), but this matches a lot of pages without the braces in their names :( : -[[!map pages="*_{*}_*"]] +[[!inline show="3" feeds="no" archive="yes" pages="*_{*}_*"]] + +(note: the inline above has been restricted to 3 matches to keep this page +concise. Hopefully it is still clear that this page is not in the output set, +and the 3 pages in the output set do not contain curly braces in their +titles). When escaped, it doesn't work at all: -[[!map pages="*_\{*}_*"]] +[[!inline show="3" feeds="no" archive="yes" pages="*_\{*}_*"]] + +[[!inline show="3" feeds="no" archive="yes" pages="*_{*\}_*"]] + +More tests: + +"\*{\*": + +[[!inline show="3" feeds="no" archive="yes" pages="*{*"]] + +"\*\\{\*": + +[[!inline show="3" feeds="no" archive="yes" pages="*\{*"]] -[[!map pages="*_{*\}_*"]] +> This is due to the current handling of quoting and escaping issues +> when converting a pagespec to perl code. `safequote` is used to +> safely quote an input string as a `q{}` quote, and it strips +> curlies when doing so to avoid one being used to break out of the `q{}`. +> +> Alternative ways to handle it would be: +> +> * Escape curlies. But then you have to deal with backslashes +> in the user's input as they could try to defeat your escaping. +> Gets tricky. +> +> * Avoid exposing user input to interpolation as a string. One +> way that comes to mind is to have a local string lookup hash, +> and insert each user specified string into it, then use the hash +> to lookup the specified strings at runtime. [[done]] +> +> --[[Joey]]