[BUGFIX] Respect line breaks in stdWrap.cropHTML 99/19499/2
authorAlexander Stehlik <alexander.stehlik@googlemail.com>
Tue, 12 Feb 2013 11:35:00 +0000 (12:35 +0100)
committerBenjamin Mack <benni@typo3.org>
Fri, 5 Apr 2013 19:45:27 +0000 (21:45 +0200)
By using the PCRE_DOTALL (/s) pattern modifier in the cropHTML
regular expression for preserving HTML entities the dot in the
pattern will include line breaks.

Resolves: #28741
Releases: 6.1, 6.0, 4.5
Change-Id: I8ce6b3e3472fc6d117474f8b8c3dfda6b26ab0a1
Reviewed-on: https://review.typo3.org/19499
Reviewed-by: Mario Rimann
Reviewed-by: Benjamin Mack
Tested-by: Benjamin Mack
typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
typo3/sysext/frontend/Tests/Unit/ContentObject/ContentObjectRendererTest.php

index 3fe018c..29c1a1f 100644 (file)
@@ -3810,17 +3810,17 @@ class ContentObjectRenderer {
                                        $cropPosition = $absChars - $strLen;
                                        // The snippet "&[^&\s;]{2,8};" in the RegEx below represents entities.
                                        $patternMatchEntityAsSingleChar = '(&[^&\\s;]{2,8};|.)';
-                                       $cropRegEx = $chars < 0 ? '#' . $patternMatchEntityAsSingleChar . '{0,' . ($cropPosition + 1) . '}$#ui' : '#^' . $patternMatchEntityAsSingleChar . '{0,' . ($cropPosition + 1) . '}#ui';
+                                       $cropRegEx = $chars < 0 ? '#' . $patternMatchEntityAsSingleChar . '{0,' . ($cropPosition + 1) . '}$#uis' : '#^' . $patternMatchEntityAsSingleChar . '{0,' . ($cropPosition + 1) . '}#uis';
                                        if (preg_match($cropRegEx, $tempContent, $croppedMatch)) {
                                                $tempContentPlusOneCharacter = $croppedMatch[0];
                                        } else {
                                                $tempContentPlusOneCharacter = FALSE;
                                        }
-                                       $cropRegEx = $chars < 0 ? '#' . $patternMatchEntityAsSingleChar . '{0,' . $cropPosition . '}$#ui' : '#^' . $patternMatchEntityAsSingleChar . '{0,' . $cropPosition . '}#ui';
+                                       $cropRegEx = $chars < 0 ? '#' . $patternMatchEntityAsSingleChar . '{0,' . $cropPosition . '}$#uis' : '#^' . $patternMatchEntityAsSingleChar . '{0,' . $cropPosition . '}#uis';
                                        if (preg_match($cropRegEx, $tempContent, $croppedMatch)) {
                                                $tempContent = $croppedMatch[0];
                                                if ($crop2space && $tempContentPlusOneCharacter !== FALSE) {
-                                                       $cropRegEx = $chars < 0 ? '#(?<=\\s)' . $patternMatchEntityAsSingleChar . '{0,' . $cropPosition . '}$#ui' : '#^' . $patternMatchEntityAsSingleChar . '{0,' . $cropPosition . '}(?=\\s)#ui';
+                                                       $cropRegEx = $chars < 0 ? '#(?<=\\s)' . $patternMatchEntityAsSingleChar . '{0,' . $cropPosition . '}$#uis' : '#^' . $patternMatchEntityAsSingleChar . '{0,' . $cropPosition . '}(?=\\s)#uis';
                                                        if (preg_match($cropRegEx, $tempContentPlusOneCharacter, $croppedMatch)) {
                                                                $tempContent = $croppedMatch[0];
                                                        }
index 75bd60f..7220205 100644 (file)
@@ -784,6 +784,18 @@ class ContentObjectRendererTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
        }
 
        /**
+        * Checks if stdWrap.cropHTML handles linebreaks correctly (by ignoring them)
+        *
+        * @test
+        */
+       public function cropHtmlWorksWithLinebreaks() {
+               $subject = "Lorem ipsum dolor sit amet,\nconsetetur sadipscing elitr,\nsed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam";
+               $expected = "Lorem ipsum dolor sit amet,\nconsetetur sadipscing elitr,\nsed diam nonumy eirmod tempor invidunt ut labore et dolore magna";
+               $result = $this->cObj->cropHTML($subject, '121');
+               $this->assertEquals($expected, $result);
+       }
+
+       /**
         * Test for the stdWrap function "round"
         *
         * @param float $float
@@ -1165,4 +1177,4 @@ class ContentObjectRendererTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
        }
 }
 
-?>
\ No newline at end of file
+?>