diff --git a/code/Model/SiteTreeLinkTracking_Parser.php b/code/Model/SiteTreeLinkTracking_Parser.php
index ae45b0fbbc..16ac823b04 100644
--- a/code/Model/SiteTreeLinkTracking_Parser.php
+++ b/code/Model/SiteTreeLinkTracking_Parser.php
@@ -68,8 +68,7 @@ public function process(HTMLValue $htmlValue)
$broken = true;
} elseif (!empty($matches['anchor'])) {
// Ensure anchor isn't broken on target page
- $anchor = preg_quote($matches['anchor'], '/');
- $broken = !preg_match("/(name|id)=\"{$anchor}\"/", $page->Content);
+ $broken = !in_array($matches['anchor'], $page->getAnchorsOnPage());
} else {
$broken = false;
}
diff --git a/tests/php/Model/SiteTreeLinkTrackingTest.php b/tests/php/Model/SiteTreeLinkTrackingTest.php
index 2f720f999e..5d0c50c81c 100644
--- a/tests/php/Model/SiteTreeLinkTrackingTest.php
+++ b/tests/php/Model/SiteTreeLinkTrackingTest.php
@@ -3,6 +3,7 @@
namespace SilverStripe\CMS\Tests\Model;
use Page;
+use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\CMS\Model\SiteTreeLinkTracking_Parser;
use SilverStripe\Control\Director;
use SilverStripe\Dev\SapphireTest;
@@ -31,6 +32,8 @@ protected function isBroken($content)
public function testParser()
{
+ SiteTree::add_extension(Page::class, SiteTreeLinkTracking_Extension::class);
+
// Shortcodes
$this->assertTrue($this->isBroken('link'));
$this->assertTrue($this->isBroken('link'));
@@ -52,6 +55,7 @@ public function testParser()
$this->assertFalse($this->isBroken('anchor'));
$this->assertTrue($this->isBroken('anchor'));
+
$page = new Page();
$page->Content = 'nameid';
$page->write();
@@ -60,6 +64,10 @@ public function testParser()
$this->assertFalse($this->isBroken("ID]#yes-name-anchor\">link"));
$this->assertFalse($this->isBroken("ID]#yes-id-anchor\">link"));
$this->assertTrue($this->isBroken("ID]#http://invalid-anchor.com\">"));
+
+ // Anchors Via updateAnchorsOnPage Extension
+ $this->assertFalse($this->isBroken("ID]#extension-anchor\">link"));
+ $this->assertTrue($this->isBroken("ID]#no-such-anchor\">"));
}
protected function highlight($content)
diff --git a/tests/php/Model/SiteTreeLinkTracking_Extension.php b/tests/php/Model/SiteTreeLinkTracking_Extension.php
new file mode 100644
index 0000000000..ab745a1ac3
--- /dev/null
+++ b/tests/php/Model/SiteTreeLinkTracking_Extension.php
@@ -0,0 +1,18 @@
+