Я пытаюсь дезинфицировать текст для экспорта CSV. Цель состоит в том, чтобы гарантировать, что никакие ячейки CSV не начинались с определенных символов (=, +, -, @, вкладка, возврата перевозки). Кроме того, каждая ячейка должна быть завернута в двойные кавычки, префикс с одной цитатой, и все внутренние двойные кавычки должны быть сбежаны.
Несколько примеров: < /p>
[*] +Пользователь, записанный в становится < /strong> < /em> '+Пользователь вошел в систему
[*] "David становится [/b] " "Дэвид
[*] larry становится larry
[*] \ tdavid становится \ tdavid
\ rworking становится \ rworking
Проблема в том, что моя режима/[\ r \ n \ t]/g не удаляет побег Последовательности, такие как \ tdavid, \ rworking. $.ajax({
url: url,
method: 'get',
dataType: 'json',
async: false,
data: data
}).done(function(data) {
result = data;
$('.logs').DataTable({
"data": result,
"columns": [
{"mData": "event_name"},
{"mData": "user_fullname"},
{"mData": "approver_fullname"},
{"mData": "requester_fullname"},
{"mData": "instance_link"},
{"mData": "group_name"},
{"mData": "time"}
],
stateSave: true,
"dom": 'lBfrtip',
"buttons": [
{
extend: 'csvHtml5',
title: 'Export',
text: 'Export',
exportOptions: {
format: {
body: function(data, row, column) {
var columnNames = ["event_name", "user_fullname", "approver_fullname", "requester_fullname", "instance_link", "group_name", "time"];
var columnName = columnNames[column];
if (columnName === "instance_link") {
return $(data).text();
}
if (["user_fullname", "approver_fullname", "requester_fullname"].includes(columnName)) {
return sanitizeField(data);
}
return data;
}
}
}
}
]
});
});
return false;
}
function sanitizeField(data) {
if (data === null || data === undefined) {
return '';
}
data = String(data);
data = data.replace(/"/g, '""');
data = data.replace(/[\r\n\t]/g, '');
if (/^[=+\-@']/.test(data)) {
data = '${data};
}
if (data.includes(',')) {
data = "${data}";
}
return data;
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... javascript