20 lines
528 B
JavaScript
20 lines
528 B
JavaScript
/**
|
|
* Escaped eine einzelne CSV-Zelle.
|
|
*
|
|
* Neben dem üblichen Quoting werden Werte neutralisiert, die mit =, +, - oder @
|
|
* beginnen: Excel und LibreOffice würden sie sonst als Formel auswerten
|
|
* (CSV-Injection über einen frei wählbaren Namen oder eine Adresse).
|
|
*/
|
|
const escapeCell = (val) => {
|
|
if (val == null) return '';
|
|
let str = String(val);
|
|
|
|
if (/^[=+\-@\t\r]/.test(str)) {
|
|
str = `'${str}`;
|
|
}
|
|
|
|
return /["\n\r,]/.test(str) ? `"${str.replace(/"/g, '""')}"` : str;
|
|
};
|
|
|
|
module.exports = { escapeCell };
|