yb/uptime-status

不支持显示特殊符号

TomsProject opened this issue · 5 comments

你好,你这个项目真的很棒
但是似乎没有对特殊符号进行处理
这是显示出来的效果
image
这是在UptimeRobot控制台显示的效果
image
似乎官方的API返回的就是这样子的,是不是需要特殊处理?
{"stat":"ok","pagination":{"offset":0,"limit":50,"total":1},"monitors":[{"id":785645632,"friendly_name":"新浪微博(接口)",

貌似把 uptimerobot.js 的 monitor.friendly_name 内容替换一下就可以了(Chrome 84 可以,其它浏览器没试)

    let name = monitor.friendly_name.replace(/'/gi, "'");
    name = name.replace(/(/gi, "(");
    name = name.replace(/)/gi, ")");
    name = name.replace(/=/gi, "=");
    name = name.replace(/[/gi, "[");
    name = name.replace(/]/gi, "]");
    name = name.replace(/"/gi, '"');
    name = name.replace(/&lt;/gi, "<");
    name = name.replace(/&gt;/gi, ">");

    apps.push({
      id: monitor.id,
      name: name,
      url: monitor.url,
      status: status,
      average: average,
      daily: daily,
      total: total,
    });

// 烂代码,大佬勿喷

我觉得封装成函数更好一些

function convert(str){ 
  str = str.replace(/(\\u)(\w{1,4})/gi, function($0){ 
      return (String.fromCharCode(parseInt((escape($0).replace(/(%5Cu)(\w{1,4})/g,"$2")),16))); 
  }).replace(/(&#x)(\w{1,4});/gi, function($0){ 
      return String.fromCharCode(parseInt(escape($0).replace(/(%26%23x)(\w{1,4})(%3B)/g,"$2"),16)); 
  }).replace(/(&#)(\d{1,6});/gi, function($0){ 
      return String.fromCharCode(parseInt(escape($0).replace(/(%26%23)(\d{1,6})(%3B)/g,"$2"))); 
  }); 
  return str; 
}

方便调用

yb commented

HTML 实体符号挺多的,靠 replace 无法从根本解决问题,在最新的 v1.4.0 更新中引入了 htmr 进行转义,已解决这个问题;
谢谢二位提出的 issue!

HTML 实体符号挺多的,靠 replace 无法从根本解决问题,在最新的 v1.4.0 更新中引入了 htmr 进行转义,已解决这个问题;
谢谢二位提出的 issue!

@yb 另外,我稍改了一下页面样式,适配了我所用的主题,页面链接:https://renbaoshuo.github.io/status/ ,且页面下方已经注明版权,请问可以吗?

a1I7iq.png

yb commented

@yb 另外,我稍改了一下页面样式,适配了我所用的主题,页面链接:https://renbaoshuo.github.io/status/ ,且页面下方已经注明版权,请问可以吗?

of course,欢迎使用