ソースを参照

Merge pull request #4891 from wenzhixin/fix/4873

fix/4873
文翼 5 年 前
コミット
0ca19690b4
2 ファイル変更29 行追加1 行削除
  1. 16 1
      src/extensions/editable/bootstrap-table-editable.js
  2. 13 0
      src/utils/index.js

+ 16 - 1
src/extensions/editable/bootstrap-table-editable.js

@@ -102,7 +102,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
         return
       }
 
-      const data = this.getData()
+      const data = this.getData({escape: true})
       const $field = this.$body.find(`a[data-name="${column.field}"]`)
 
       $field.each((i, element) => {
@@ -131,6 +131,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
           }
         }
 
+        submitValue = Utils.escapeHTML(submitValue)
         $this.data('value', submitValue)
         row[column.field] = submitValue
         this.trigger('editable-save', column.field, row, rowIndex, oldValue, $this)
@@ -157,4 +158,18 @@ $.BootstrapTable = class extends $.BootstrapTable {
     })
     this.trigger('editable-init')
   }
+
+  getData (params) {
+    const data = super.getData(params)
+
+    if (params && params.escape) {
+      for (const row of data) {
+        for (const [key, value] of Object.entries(row)) {
+          row[key] = Utils.unescapeHTML(value)
+        }
+      }
+    }
+
+    return data
+  }
 }

+ 13 - 0
src/utils/index.js

@@ -184,6 +184,19 @@ export default {
     return text
   },
 
+  unescapeHTML (text) {
+    if (typeof text === 'string') {
+      return text
+        .replace(/&/g, '&')
+        .replace(/&lt;/g, '<')
+        .replace(/&gt;/g, '>')
+        .replace(/&quot;/g, '"')
+        .replace(/&#039;/g, '\'')
+        .replace(/&#x60;/g, '`')
+    }
+    return text
+  },
+
   getRealDataAttr (dataAttr) {
     for (const [attr, value] of Object.entries(dataAttr)) {
       const auxAttr = attr.split(/(?=[A-Z])/).join('-').toLowerCase()