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时ü,将所有元音变换为实体(对于HTML,\00FC用于CSS).这是有效的,但感觉非常麻烦,容易打破.
决定JavaScript生成内容编码的因素有哪些?有没有办法让主机站点"尊重"我的脚本输出的编码?这可能是由于某些服务器配置错误造成的?
我不太清楚为什么你觉得逃避很麻烦......
对于 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 结构。
我认为这一切都是相当可靠的。