Xpath XQuery解码HTTP请求-无法分析查询
在XQuery 3.1(eXist db 4.4下)中,我接收到对a控制器的搜索请求,在a控制器中,我从URL的查询字符串Xpath XQuery解码HTTP请求-无法分析查询,xpath,xquery,exist-db,Xpath,Xquery,Exist Db,在XQuery 3.1(eXist db 4.4下)中,我接收到对a控制器的搜索请求,在a控制器中,我从URL的查询字符串text创建一个参数docset: else if (starts-with(lower-case($exist:path), "/search")) then <dispatch xmlns="http://exist.sourceforge.net/NS/exist"> <forward url="{$exist:controller}/se
text
创建一个参数docset
:
else if (starts-with(lower-case($exist:path), "/search")) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
<forward url="{$exist:controller}/search.html"/>
<view>
<forward url="{$exist:controller}/modules/view.xql">
<add-parameter name="docset"
value="{search:search-term-cleaner(request:get-parameter("text","norequest"))}"/>
<add-parameter name="pagetype" value="search"/>
</forward>
</view>
</dispatch>
在两种稍有不同的情况下,存在两个问题:
/search?text=some%+text
中,则站点会向/search?text=some+text
,则控制器将通过sometext
,而不带允许的+
符号这是通过本地主机
http://localhost:8081/exist/apps/
函数,如util:unescape uri
和escape uri
是您的朋友。
由于您正在使用的字符串是通过http发送的,因此将对其进行转义。通过在中搜索escape
,可以了解有关可用转义函数的更多信息
<> >对于更详细的操作,请考虑<代码>规范Unicode < /Code > < P>当通过<代码>请求:GET-PosialEnter()/Code >获取参数时,您不需要脱掉URI编码的参数。代码>%20和
+
自动作为空格字符交给您 事实上,一个问题是有人可能会将一个“禁止”字符转储到搜索字符串中,例如我给出的示例some%+text
。我不知道当它击中控制器时会发生什么-因此我无法想出一个处理它的策略。最好的办法是,imv可以在输入表单中进行uri编码,在xquery中进行uri解码。如果确实要限制字符(ǚ
,漢代码>,` ` ) ppl可以搜索,更复杂的函数是必要的。但基本思想保持不变,编码输入解码用于处理是的,输入以我可以处理的形式进行编码。我正在尝试处理用户直接在浏览器中写入字符串的意外情况(在第一个示例中)。当通过请求获取参数时:获取参数您不需要取消对URI编码的参数的扫描。%20和+将通过空格字符自动传递给您。@joewiz我简直不敢相信我花了好几个小时都没有弄明白这一点(现在很明显)事实。如果你把它作为一个答案,我会接受。它可能对未来的搜索者有用。再次感谢。
declare function search:search-term-cleaner($text as xs:string?) as xs:string?
{
let $cleanterm := replace($text,'[^A-Za-z\+*0-9]', '')
return $cleanterm
};