NutzCN Logo
问答 nutzbook不登入收入乱码
发布于 2483天前 作者 qq_d6c9c504 2031 次浏览 复制 上一个帖子 下一个帖子
标签:

使用的是nutzbook的搜索,遇到个奇怪的现象,我把layout.html改造成了post提交,页面本事是utf8编码

  <div itemscope itemtype="http://schema.org/WebSite">
	    <meta itemprop="url" content="${conf["website.urlbase"]}"/>
        <form id='search_form' method="post" class='navbar-search' action="${ctxPath}/yvr/search" itemprop="potentialAction" itemscope itemtype="http://schema.org/SearchAction">
          <input type='text' id='q' name='q' class='search-query span3' value='' itemprop="query-input" placeholder="搜索用我" required/>
        </form>
      </div>

服务器端接受 代码

    @Ok("beetl:/yvr/index.html")
    @At({"/search", "/search/?"})
    public Object search(int page, HttpServletRequest request) throws Exception {
        request.setCharacterEncoding("utf-8");
        long userId = Toolkit.uid();
        String keys = request.getParameter("q");
        if (Strings.isBlank(keys)){
            return new ServerRedirectView("/yvr/list");
        }
        if(request.getMethod().equalsIgnoreCase("GET")){
            keys = Toolkit._3DES_decode(queryKEY, Toolkit.hexstr2bytearray(keys));
        }
        log.infof("uid=%s,搜索词汇:%s", userId, keys);
        List<String> listKey = Splitter.on(" ").splitToList(keys);
        Cnd cndQuery = Cnd.where("onLine", "=", 1);
        for(String key : listKey){
            cndQuery.and("summaryinfo", "like", "%"+key.trim()+"%");
        }
        Pager pager = dao.createPager(page > 0 ? page : 1, pageSize);
        pager.setRecordCount(dao.count(Mv_movie.class, cndQuery));
        List<Mv_movie> list = dao.query(Mv_movie.class, cndQuery.orderBy("opAt", "desc"), pager);
        NutMap re = processQueryList(pager, list, null, userId, "search/{page}?q="+Toolkit._3DES_encode(queryKEY, keys.getBytes()));
        re.put("q", keys);
        return re;
    }

登入用户搜索没问题,非登入用户搜索就出现编码问题,下面是日志

12:54:05.041 INFO  (YvrModule.java:328) search - uid=7039,搜索词汇:芳华
12:54:08.945 INFO  (YvrModule.java:328) search - uid=-1,搜索词汇:雷神3
12:54:14.600 INFO  (YvrModule.java:328) search - uid=-1,搜索词汇:雷神
12:55:14.275 INFO  (YvrModule.java:328) search - uid=11593,搜索词汇:水形物语
12:55:22.752 INFO  (YvrModule.java:328) search - uid=-1,搜索词汇:2017 美国 科幻
12:55:24.236 INFO  (YvrModule.java:328) search - uid=-1,搜索词汇:红海行åŠ

我本地没问题,是不是和线上linux机器编码问题有关系,那为啥登入用户编码没问题。编码拦截器只拦截登入用户请求?

17 回复

说的是nutzcn的代码吗?? web.xml改动过吗?

没改过呢,是的,论坛的编码,非常奇怪

稍等,我大概知道什么事,待我提交一下

好,我试试,奇怪,为啥我本地环境没问题呢,发布到线上就这样

search 不用搜索引擎做?

不用的
我们直接走数据库,我加上这个线上还是乱码

是不是我环境有关系,我本地就没这个问题

线上是tomcat吗?

如果是的话,改一下URIEnCoding

如果tomcat的问题为啥只有非登入用户才会乱码,这点不太懂

改urlencode重启之后还是不行,感觉还是和登入和非登入用户有关联,登入用户就不乱码

Request URL:http://www.5iddd.com/yvr/search
Request Method:POST
Status Code:200 OK
Remote Address:47.90.111.175:80
Referrer Policy:unsafe-url
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html;charset=UTF-8
Date:Tue, 06 Mar 2018 06:09:34 GMT
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Powered-By:nutz/1.r.65-SNAPSHOT <nutzam.com>
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.9,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:20
Content-Type:application/x-www-form-urlencoded
Host:www.5iddd.com
Origin:http://www.5iddd.com
Referer:http://www.5iddd.com/yvr/search
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
q:测试
``
请求已经是Content-Type:text/html;charset=UTF-8。
服务器接受也设置了

@Ok("beetl:/yvr/index.html")
@At({"/search", "/search/?"})
public Object search(int page, HttpServletRequest request) throws Exception {
    request.setCharacterEncoding("utf-8");
    long userId = Toolkit.uid();
    String keys = request.getParameter("q");
    log.infof("搜索词汇:%s", keys);
    if (Strings.isBlank(keys)){
        return new ServerRedirectView("/yvr/list");
    }
    if(request.getMethod().equalsIgnoreCase("GET")){
        keys = Toolkit._3DES_decode(queryKEY, Toolkit.hexstr2bytearray(keys));
    }

```

是URIEncoding哦

如果参数是从url里面来的,受URIencoding影响,如果是post body的话,WhaleFilter应该能解决,原因是shiro拿不到cookie的时候,会尝试从req.getParamter取session id,这就需要提前把req的encode设置好,在shiro之前

添加回复
请先登陆
回到顶部