使用 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, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
(取自 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 的编码。
感谢支持。
在 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, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
(取自 best answer 这个问题)。
然后更改您的函数以调用此函数:
function handleContentinHTML (contentEl, value)
{
contentEl.innerHTML = htmlEscape(value);
}
尽管如果您使用的是 JQuery,您可以只使用 text()
来设置:
function handleContentinHTML (contentEl, value)
{
contentEl.text(value);
}
起初我没有在低版本中检查这个。当我检查时,它在较低版本
感谢支持。