diff --git a/.phpunit.result.cache b/.phpunit.result.cache
new file mode 100644
index 0000000..6d8a6fe
--- /dev/null
+++ b/.phpunit.result.cache
@@ -0,0 +1 @@
+{"version":1,"defects":{"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"nbsp-spaces-added.html\"":3},"times":{"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"ICC-5136.html\"":0.013,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"first-and-last.html\"":0.009,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"issue-28-link-changes.html\"":0.005,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"keep-newlines-test.html\"":0.003,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"multibyte.html\"":0.001,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"multiline-tag.html\"":0,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"new-paragraph-and-list.html\"":0.071,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-2.html\"":0.008,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-3.html\"":0.026,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-4.html\"":0.026,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-5.html\"":0.059,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-6.html\"":0.031,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-8.html\"":0.016,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"override-9.html\"":0.005,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"simple-list.html\"":0.018,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"space-inside-isolated-tag.html\"":0.003,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"spaces-added.html\"":0.001,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"spaces-removed-inside-tag.html\"":0.003,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"table-whitespace-issue.html\"":0.011,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"nbsp-spaces-added.html\"":0.002,"Caxy\\Tests\\HtmlDiff\\Functional\\HtmlDiffFunctionalTest::testHtmlDiff with data set \"nbsp-spaces-default-behavior.html\"":0.001,"Caxy\\Tests\\HtmlDiff\\Functional\\HTMLPurifierConfigTest::testHtmlDiffConfigTraditional":0.026,"Caxy\\Tests\\HtmlDiff\\Functional\\HTMLPurifierConfigTest::testHtmlDiffConfigStatic":0.005}}
\ No newline at end of file
diff --git a/lib/Caxy/HtmlDiff/AbstractDiff.php b/lib/Caxy/HtmlDiff/AbstractDiff.php
index ac4fff9..b6179e3 100644
--- a/lib/Caxy/HtmlDiff/AbstractDiff.php
+++ b/lib/Caxy/HtmlDiff/AbstractDiff.php
@@ -430,8 +430,10 @@ protected function convertHtmlToListOfWords(string $text) : array
$specialCharacters .= '\\' . $char;
}
- // Normalize no-break-spaces to regular spaces
- $text = str_replace("\xc2\xa0", ' ', $text);
+ // Normalize no-break-spaces to regular spaces (unless space matching is enabled)
+ if (!$this->config->isSpaceMatching()) {
+ $text = str_replace("\xc2\xa0", ' ', $text);
+ }
preg_match_all('/<.+?>|[^<]+/mus', $text, $sentencesAndTags, PREG_SPLIT_NO_EMPTY);
@@ -480,7 +482,12 @@ protected function normalizeWhitespaceInHtmlSentence(string $sentence) : string
return $sentence;
}
- $sentence = preg_replace('/\s\s+|\r+|\n+|\r\n+/', ' ', $sentence);
+ // When space matching is enabled, preserve multiple spaces
+ if ($this->config->isSpaceMatching()) {
+ $sentence = preg_replace('/\r+|\n+|\r\n+/', ' ', $sentence);
+ } else {
+ $sentence = preg_replace('/\s\s+|\r+|\n+|\r\n+/', ' ', $sentence);
+ }
$sentenceLength = $this->stringUtil->strlen($sentence);
diff --git a/tests/fixtures/HtmlDiff/nbsp-spaces-added.html b/tests/fixtures/HtmlDiff/nbsp-spaces-added.html
new file mode 100644
index 0000000..54d3263
--- /dev/null
+++ b/tests/fixtures/HtmlDiff/nbsp-spaces-added.html
@@ -0,0 +1,6 @@
+
+
+
+