hackergame icon indicating copy to clipboard operation
hackergame copied to clipboard

改善 URL hash 部分效果

Open SmartHypercube opened this issue 4 years ago • 0 comments

目前打开一道题目时,URL 会自动被加上 #题目名称 这样的部分,并在页面加载时读取这个信息来直接打开相应题目,以便用户加书签/分享链接。但是题目名称中如果有空格或其他特殊字符,就会被 urlencode(例如,信息安全 2077 变成 #信息安全%202077),看起来很难看。应当改成这个逻辑:

  1. 有一个将题目名称转换成 hash part 的函数 f。对于非 ASCII 字符和不会被 urlencode 的 ASCII 字符,它应当原样保留。对于会被 urlencode 的 ASCII 字符,它必须替换为 -。然后,连续多个 - 应当合并成一个,即使它们是从原文中原样保留得到的。
  2. 当用户打开某道题目时,将 URL hash part 设置为题目名称经过 f 变换的结果。
  3. 当页面被加载时,读取 URL hash part,将它与每道题目的题目名称经过 f 变换的结果对比,若有匹配,打开相应题目。
  4. 服务器必须用某种方法保证不会出现两道题目,它们的题目名称经过 f 变换后相同。
  5. 为了保证第 2、3 步中用的 f 和第 4 步中用的 f 算法一致,第 2、3 步中用到的“每道题目的题目名称经过 f 变换的结果”可以在后端算出并传输到前端。

SmartHypercube avatar Aug 01 '20 06:08 SmartHypercube