使用 android 中的 javascript 设置内容时出现编码问题

Encoding issue when setting a content using javascript in android

在 webview 中,我将使用 css.

加载静态 html 文件

webView.loadUrl("file:///android_asset/customhtml.html

在那html我也在meta标签中设置编码为<meta http-equiv="content-type" content="text/html; charset=utf-8"/>

加载此文件后,我会将内容设置为

webView.loadUrl("javascript:setContent(" + JSONObject.quote(content)+")");

这里是javascript

`function setContent(contentToSet)
{ 
    setBaseURL();
    var mailContentElement = document.getElementById('mailcontentid'); 
    mailContentElement.innerHTML = ""
    handleContentinHTML($('mailcontentid'),contentToSet);
    androidResponse(true);   //method to call android js interface
}

function handleContentinHTML (contentEl, value)
{
    contentEl.innerHTML = value;
}`

问题:当设置 contentlike filename=0000%3Cimg%20src%3da%20onerror%3dalert(test)%3Eb4911111 时,这会转换为 html 图像标签并显示警告消息。此内容未完全按照文本形式显示。

我试过的一些测试:

1 - 在 webview 设置中设置编码 settings.setDefaultTextEncodingName("utf-8");

2 - 将 html 文件转换为字符串并加载为 myWebView.loadDataWithBaseURL(null, convertfiletohtmlString, "text/html", "utf-8", null); 并使用 javascript.

设置内容

3 - 在 javascript 中使用 escape(contentToSet) ;

似乎没有任何效果。请帮我 post 你的建议。

制作一个HTML转义函数:

function htmlEscape(str) {
    return String(str)
            .replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');
}

(取自 best answer 这个问题)。

然后更改您的函数以调用此函数:

function handleContentinHTML (contentEl, value)
{
    contentEl.innerHTML = htmlEscape(value);
}

尽管如果您使用的是 JQuery,您可以只使用 text() 来设置:

function handleContentinHTML (contentEl, value)
{
    contentEl.text(value);
}

起初我没有在低版本中检查这个。当我检查时,它在较低版本 evaluateJavascript() 来执行 javascripts post kitkat。当我使用它时,问题就解决了。但直到不确定为什么 loadUrl() 不支持执行 javascripts 的编码。

感谢支持。