diff --git a/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php b/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php
index 628221352d68b09bdf83d70c5742774c1897ed0b..4836bd097bbf997ac972f3e23dfbbe5e26df9231 100644
--- a/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php
+++ b/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php
@@ -73,8 +73,11 @@ class SolrMarc extends SolrDefault
         if (strcasecmp(substr($marc, 0, strlen($xmlHead)), $xmlHead) === 0) {
             $marc = new \File_MARCXML($marc, \File_MARCXML::SOURCE_STRING);
         } else {
-            $marc = preg_replace('/#31;/', "\x1F", $marc);
-            $marc = preg_replace('/#30;/', "\x1E", $marc);
+            // When indexing over HTTP, SolrMarc may use entities instead of certain
+            // control characters; we should normalize these:
+            $marc = str_replace(
+                array('#29;', '#30;', '#31;'), array("\x1D", "\x1E", "\x1F"), $marc
+            );
             $marc = new \File_MARC($marc, \File_MARC::SOURCE_STRING);
         }