diff --git a/modules/market_management/service.php b/modules/market_management/service.php
index 00458f0..aebc125 100644
--- a/modules/market_management/service.php
+++ b/modules/market_management/service.php
@@ -66,7 +66,7 @@ function market_management_sanitize_multiline_html(?string $value): ?string
$tokens = preg_split('/(<\/?a\b[^>]*>|
|<\/?strong\s*>)/iu', $value, -1, PREG_SPLIT_DELIM_CAPTURE);
if ($tokens === false) {
- return htmlspecialchars($value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
+ return htmlspecialchars($value, ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
$result = '';
@@ -89,7 +89,7 @@ function market_management_sanitize_multiline_html(?string $value): ?string
$result .= '';
$anchorOpen = false;
} else {
- $result .= htmlspecialchars($token, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
+ $result .= htmlspecialchars($token, ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
continue;
}
@@ -103,7 +103,7 @@ function market_management_sanitize_multiline_html(?string $value): ?string
$anchorOpen = true;
continue;
}
- $result .= htmlspecialchars($token, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
+ $result .= htmlspecialchars($token, ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
if ($anchorOpen) {
$result .= '';
@@ -1106,7 +1106,6 @@ function market_management_get_occurrence(PDO $pdo, int $occurrenceId, bool $inc
break;
}
}
- market_management_sanitize_occurrence_payload($occurrence);
$costSummary = $pdo->prepare(
'SELECT COALESCE(SUM(gross_amount), 0) AS gross_amount,
COALESCE(SUM(net_amount), 0) AS net_amount,
diff --git a/scripts/tests/market_management_sanitizer_test.php b/scripts/tests/market_management_sanitizer_test.php
new file mode 100644
index 0000000..7d50781
--- /dev/null
+++ b/scripts/tests/market_management_sanitizer_test.php
@@ -0,0 +1,28 @@
+ \"C\"";
+$sanitized = market_management_sanitize_multiline_html($plainText);
+assert_test($sanitized === "Test 'A' & <B> \"C\"", 'Plain text must preserve quotes and escape markup characters once');
+
+$link = 'Vertrag';
+$sanitizedLink = market_management_sanitize_multiline_html($link);
+assert_test(str_contains($sanitizedLink, 'class="sg-hyperlink"'), 'Allowed links must remain links');
+assert_test(str_contains($sanitizedLink, 'href="https://erpnaurua.imhochrain.ch/files.php?path=Marktmanagement%2Fvertrag.pdf"'), 'Link href must remain valid');
+
+fwrite(STDOUT, "market_management_sanitizer_test: OK\n");