CSS伪元素(::before和::after)中的content属性中文乱码的问题

原创 野人  2021-12-30 21:45  阅读 97 次

哦吼,因为上个项目已经开发完很久了,所以已经很少有运维的需求了,结果今天一来,都是些后端业务逻辑上的bug,而经过确认后,我这边就一个bug,也就是本文的主题。

正常情况下,在伪元素(::before和::after)中content属性这样写没啥问题的:

.test::before {
    content: '测试'
}

然而这个bug还挑浏览器的,由于我自己本机无法复现该问题,所以就解决了提出该问题的人,哈哈,开个玩笑。

温馨提示;关于CSS伪元素写法,有::before/:before::afte/:afte,最大的区别就是一个/两个冒号,但是现在主流的浏览器都支持这两种写法(据说,之前为了兼容IE浏览器用的是一个冒号,好可恶啊,不搞规范走),但是为了好分辨伪元素和伪类,一般伪元素都是用两个冒号,而伪类就是一个冒号,我目前也是遵循这个规范的。

本来是想过去找运维的人员,结果网上一搜索一大堆的类似的情况,在自己本机调整完成后,让运维访问我本机的,看下是否正常,没有问题的话,就在下个版本更新了,很幸运,一把过,那么接下来就给大家分享下怎么解决这个问题的。

1、首先把content属性的值,全部转为Unicode码,点我打开转换工具(网上随便工具找的,其实大家们也可以自己写,原理还是挺简单的,就是找到对应字的具体Unicode码,然后转换成16进制即可,然后不足位补足4位)

//Unicode编码(包含数字和英文)
function encodeUnicode(str) {
  let res = [];
  for (let i = 0; i < str.length; i++) {
    res[i] = ("00" + str.charCodeAt(i).toString(16)).slice(-4);
  }
  return "\\u" + res.join("\\u");
}

//Unicode解码
function decodeUnicode(str) {
  str = str.replace(/\\/g, "%");
  return unescape(str);
}

2、通过上面的方法,已经可以知道了,【测试】的Unicode编码为:\u6d4b\u8bd5,这时候就要注意了,这里还有个知识点,就是不同的地方有不同的写法,具体的可以查看这篇文章《在HTML、JavaScript、CSS中如何使用Unicode字符?

本文地址:https://www.yerenwz.com/5458.html
版权声明:本文为原创文章,版权归 野人 所有,欢迎分享本文,转载请保留出处!

发表评论