在安卓中使用 JavaScript 设置内容时出现编码问题
Encoding issue when setting a content using javascript in android
在webview中,我将使用css加载静态html文件。
webView.loadUrl("file:///android_asset/customhtml.html
在该 html 中,我还将元标记中的编码设置为 <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;
}`
问题:设置内容时,例如filename=0000%3Cimg%20src%3da%20onerror%3dalert(test)%3Eb4911111
会将其转换为html图像标记并显示警报消息。此内容的显示方式与文本形式不完全相同。
我尝试过的一些测试:
1 - 在 Web 视图设置settings.setDefaultTextEncodingName("utf-8");
中设置e编码
2 - 将 HTML 文件转换为字符串并加载为myWebView.loadDataWithBaseURL(null, convertfiletohtmlString, "text/html", "utf-8", null);
并使用 JavaScript 设置内容。
3 - 在 JavaScript 中使用 escape(contentToSet)
;
似乎什么都不起作用。请帮我发布您的建议。
起初我没有在较低版本中检查这一点。当我检查时,它在 kitkat
感谢您的支持。
创建一个 HTML 转义函数:
function htmlEscape(str) {
return String(str)
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
(取自这个问题的最佳答案)。
然后更改函数以调用以下命令:
function handleContentinHTML (contentEl, value)
{
contentEl.innerHTML = htmlEscape(value);
}
虽然如果你使用的是JQuery,你可以使用text()
来设置它:
function handleContentinHTML (contentEl, value)
{
contentEl.text(value);
}
- 我不知道我的编码有什么问题.(JavaScript)
- ajax表单提交的编码问题
- 导出为 CSV 时的编码问题
- 地理编码器 - IE8 中的编码问题
- 参数未正确传递给AJAX-编码问题
- 谷歌地图客户端地理编码“;OVER_QUERY_LIMIT”;问题
- AngularJS/Grunt编码问题
- 地理编码限制问题
- 编码百分比值时出现问题
- Outlook中的HTML锚定邮件主题编码问题
- 服务器编码的JSON数据出现问题,无法绘制图表
- NetSuite Restlet PDF 文件编码问题
- 使用地址进行地理编码 - over_query_limit问题
- Angular2 奇怪的硬编码对象与 http.get 对象问题
- 使用地理编码返回陆基坐标数组时出现问题
- 在安卓中使用 JavaScript 设置内容时出现编码问题
- Javascript到csv导出编码问题
- 为什么此字符编码问题仅在选定系统上出现
- JavaScript utf-8 编码问题
- 数学数组作业问题编码javascript