将JS和CSS生成的变音符号提供给所有可能的主页编码的工作策略是什么?

m90*_*m90 5 html javascript css templates character-encoding

我正在提供嵌入式服务<script>,用户可以将其复制/粘贴到他们的网站中并显示内容.

该脚本加载样式表并呈现注入主机页面的一些HTML.

当主页以不同于我的脚本(以UTF-8编码)的编码(如ISO-8559-1)编码时,我遇到显示特殊字符(ü,ö,ä,你的名字)的问题.特殊字符会出现乱码.

内容注入如下:

var content = template.render(model);
$('#some-el').html(content);
Run Code Online (Sandbox Code Playgroud)

同样的问题适用于通过CSS伪像生成的内容,例如:

.some-class::after{
  content: 'Ümläüts äré fün';
}
Run Code Online (Sandbox Code Playgroud)

我现在解决这个问题的方法是在编译我的模板(通过hogan.js编译的Mustache)和构建步骤中的CSS时&uuml;,将所有元音变换为实体(对于HTML,\00FC用于CSS).这是有效的,但感觉非常麻烦,容易打破.

决定JavaScript生成内容编码的因素有哪些?有没有办法让主机站点"尊重"我的脚本输出的编码?这可能是由于某些服务器配置错误造成的?

c-s*_*ile 1

我不太清楚为什么你觉得逃避很麻烦......

对于 HTML,您可以转义所有代码大于 127(伪代码)的字符:

uint code = ...
if( code < ' '|| code > 127 ) {  
  print("&#"); 
  print(toString(code)); 
  print(";"); 
} else {
  print(code); 
}
Run Code Online (Sandbox Code Playgroud)

这将转义所有非 ASCII 字符。

CSS 也几乎相同。CSS 中的此类符号只能出现在字符串文字或注释中,因此您可以简单地转义 CSS 文件中的所有非 ASCII 字符,而无需解析 CSS 结构。

我认为这一切都是相当可靠的。