Flarum icon indicating copy to clipboard operation
Flarum copied to clipboard

utf-8 url转译扩展?

Open shangjiaxuan opened this issue 5 years ago • 5 comments

如题,现在主代码仓库的数据库里面的字符串基本都是可以支持非ascii编码的单独的字符串了,但是唯独url还是不能有空格和中文。目前看起来flarum-china的解决方法是用户链接/u/username改成/u/userid条目链接/d/discussionid-discussionname改成了/d/discussionid,只留下了一串数字。

如果使用官方扩展仓库foftransliterator会把讨论条目链接的标题部分变成拼音,治标不治本。因为讨论条前面有数字,所以有没有空格,拼音相同也是没有问题的。但是到了用户就不是这样。

但是我真的还是想用/u/用户名称来访问用户条目,毕竟这样才更有社区的感觉。原则上只要把utf-8编码的字符串用标准的那种%xx的十六进制表示出来,现行的大部分浏览器似乎都是这样做的,就能解决问题了。(url输入中文就会这样处理非允许的字符)

但是这需要在服务器端逻辑里面去处理。不知道有人感兴趣搞一下吗。。。或者在fof/transliterator里面加一个这样的两个地方都这样子转译的选项。

shangjiaxuan avatar Dec 03 '19 10:12 shangjiaxuan

在讨论串里面点头像进中文用户名用户界面,目前默认不开新页面有时候能成功进入,但是有空格又不行。这里可能有另一个代码路线,也应该处理一下。(指在页面产生的url也要先编码好)

shangjiaxuan avatar Dec 03 '19 10:12 shangjiaxuan

似乎英文标签如果有空格也有这个问题。应该如果能识别%20就能解决了

shangjiaxuan avatar Dec 03 '19 10:12 shangjiaxuan

按最新的release,似乎也有人提到utf-8的问题,主要开发人员讲的是本地临时修改一点点应该不难,可以在主仓库开issue。

按我的理解应该主要改一下core/src/Http里面的东西就可以了(如果后续处理不管http不允许的字符,这里字符串改对应该就可以了?)?

(更好的当然是在每个需要的模块去改。。。)

shangjiaxuan avatar Dec 03 '19 10:12 shangjiaxuan

具体实际在数据库查询的字符串如图: https://forum.nepfan.club/assets/files/2019-12-03/1575371941-530726-en-space.png https://forum.nepfan.club/assets/files/2019-12-03/1575371964-632641-cjk-string.png

shangjiaxuan avatar Dec 03 '19 11:12 shangjiaxuan

用户名url的问题似乎可以在src/Api//Controller/ShowUserController.php里面的

protected function data(ServerRequestInterface $request, Document $document)

修改

if (! is_numeric($id)) {
    $id = $this->users->getIdForUsername($id);
}

if (! is_numeric($id)) {
    $id = $this->users->getIdForUsername(urldecode($id));
}

解决

shangjiaxuan avatar Dec 03 '19 20:12 shangjiaxuan