我有一个函数来转义HTML标记,以便能够将文本插入HTML中。非常类似于:我可以在javascript中转义html特殊字符吗?
我知道Javascript内部使用Unicode,但HTML页面可能用不同的字符集编码,如UTF-8或ISO8859-1等
我的问题是:这个非常简单的转换有什么问题吗?还是应该考虑页面字符集?
如果是,如何处理?
PS:例如,等价的PHP函数(http://php.net/manual/en/function.htmlspecialchars.php)具有用于选择字符集的参数。
不,JavaScript生活在Unicode世界中,所以编码问题对它来说通常是看不见的。链接问题中的escapeHtml
是可以的。
我唯一能想到JavaScript可以看到字节的地方是data:
URL(通常隐藏在base64下面)。所以这个:
var markup = '<p>Hello, '+escapeHtml(user_supplied_data);
var url = 'data:text/html;base64,'+btoa(markup);
iframe.src = url;
原则上是件坏事。虽然我不知道有哪个浏览器会在这种情况下猜测UTF-7,但应该提供charset=...
参数,以确保浏览器对数据使用适当的编码。(btoa
使用ISO-8859-1。)