As I suspected ad_conn path_info is urldecoded automatically.
I created a test on one of my sites like this.
url.vuh
set path_info [ad_conn path_info]
ad_return_complaint 1 "Path Info = '${path_info}'"
Then i visited /url/this is a test %26 %26 (foo)
and the result is
We had a problem with your input:
Path Info = '/this is a test & & (foo)'
Please back up using your browser, correct the above error, and resubmit your entry.
Thank you.
The contents of ad_conn path info are url decoded properly.
What version of OpenACS are you using? My test is a version of 5.7, I believe.