0

我通过 jQuery 将数据库值存储在 HTML5 数据属性中,同时首先将它们转义为 HTML 属性安全,并且它适用于Strings.

但是,如果我存储了一个不以 开头的数字0,它总是给出,例如当值是1000

未捕获的类型错误:对象 1000 没有“替换”方法

如何解决这个问题?

html 转义符/unescaper

function escapeHtml(unsafe) {
    return unsafe
        .replace(/&/g, "&")
        .replace(/</g, "&lt;")
        .replace(/>/g, "&gt;")
        .replace(/"/g, "&quot;")
        .replace(/'/g, "&#039;");
}
function unescapeHtml(unsafe) {
    return unsafe
        .replace(/&amp;/g, "&")
        .replace(/&lt;/g, "<")
        .replace(/&gt;/g, ">")
        .replace(/&quot;/g, "\"")
        .replace(/&#039;/g, "'");
}

我用这个作为 HTML5 数据$.append()的元素。Stringdata-sortValue="'+sortValue+'"

我尝试在另一个函数中再次阅读它unescapeHtml(String($(this).data('sortvalue')))

4

1 回答 1

1

问题是您没有处理unsafe可能是数字undefined/unsafe布尔值的情况。

在这里我们可以检查是否unsafe存在以及replace功能是否可用。

function escapeHtml(unsafe) {
    return unsafe && $.isFunction(unsafe.replace) ? unsafe
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&#039;") : unsafe;
}
function unescapeHtml(unsafe) {
    return unsafe && $.isFunction(unsafe.replace) ? unsafe
    .replace(/&amp;/g, "&")
    .replace(/&lt;/g, "<")
    .replace(/&gt;/g, ">")
    .replace(/&quot;/g, "\"")
    .replace(/&#039;/g, "'") : unsafe;
}

演示:小提琴

于 2013-05-01T16:29:08.263 回答