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 :( :
[[!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:
[[!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="{"]]
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]]
Thank you! I'll try it. --Ivan Z.