@@ -427,13 +427,21 @@ protected function _filter_images( $content, $include_noscript = null ) {
427427 // replace the src and add the data-src attribute
428428 $ replaceHTML = $ imgHTML ;
429429
430- if ( ! preg_match ( "/ data-src=[' \"]/is " , $ replaceHTML ) ) {
431- $ replaceHTML = preg_replace ( '/<img(.*?)src=/is ' , '<img$1src=" ' . $ this ->_placeholder_url . '" data-lazy-type="image" data-src= ' , $ replaceHTML );
432- } elseif ( preg_match ( "/ src=[' \"]/is " , $ replaceHTML ) ) {
433- $ replaceHTML = preg_replace ( '/ src=([" \'])(.*?)[" \']/is ' , ' src=" ' . $ this ->_placeholder_url . '" ' , $ replaceHTML );
430+ if ( ! preg_match ( "/ \\sdata-src=[' \"]/is " , $ replaceHTML ) ) {
431+ $ replaceHTML = preg_replace (
432+ '/<img \\b((?:(?:"[^"]*")|(?: \'[^ \']* \')|[^" \'<>])*) \\s+src=([" \'])(.*?)\2/is ' ,
433+ '<img$1 src=" ' . $ this ->_placeholder_url . '" data-lazy-type="image" data-src=$2$3$2 ' ,
434+ $ replaceHTML
435+ );
436+ } elseif ( preg_match ( "/ \\s+src=[' \"]/is " , $ replaceHTML ) ) {
437+ $ replaceHTML = preg_replace ( '/ \\s+src=([" \'])(.*?)\1/is ' , ' src=" ' . $ this ->_placeholder_url . '" ' , $ replaceHTML );
434438 }
435439
436- $ replaceHTML = preg_replace ( '/<img(.*?)srcset=/is ' , '<img$1srcset="" data-srcset= ' , $ replaceHTML );
440+ $ replaceHTML = preg_replace (
441+ '/<img \\b((?:(?:"[^"]*")|(?: \'[^ \']* \')|[^" \'<>])*) \\s+srcset=([" \'])(.*?)\2/is ' ,
442+ '<img$1 srcset="" data-srcset=$2$3$2 ' ,
443+ $ replaceHTML
444+ );
437445
438446 // add the lazy class to the img element
439447 if ( preg_match ( '/class=[" \']/i ' , $ replaceHTML ) ) {
@@ -476,7 +484,11 @@ protected function _filter_images( $content, $include_noscript = null ) {
476484 $ i ++;
477485 // replace the srcset and add the data-srcset attribute
478486 $ replaceHTML = '' ;
479- $ replaceHTML = preg_replace ( '/<source(.*?)srcset=/is ' , '<source$1srcset="" data-srcset= ' , $ imgHTML );
487+ $ replaceHTML = preg_replace (
488+ '/<source\b((?:(?:"[^"]*")|(?: \'[^ \']* \')|[^" \'<>])*)\s+srcset=([" \'])(.*?)\2/is ' ,
489+ '<source$1 srcset="" data-srcset=$2$3$2 ' ,
490+ $ imgHTML
491+ );
480492
481493 // add the lazy class to the img element
482494 if ( preg_match ( '/class=[" \']/i ' , $ replaceHTML ) ) {
@@ -579,7 +591,11 @@ protected function _filter_videos( $content, $include_noscript = null ) {
579591 $ i ++;
580592 // replace the src and add the data-src attribute
581593 $ replaceHTML = '' ;
582- $ replaceHTML = preg_replace ( '/iframe(.*?)src=/is ' , 'iframe$1 data-lazy-type="iframe" data-src= ' , $ imgHTML );
594+ $ replaceHTML = preg_replace (
595+ '/<iframe\b((?:(?:"[^"]*")|(?: \'[^ \']* \')|[^" \'<>])*)\s+src=([" \'])(.*?)\2/is ' ,
596+ '<iframe$1 data-lazy-type="iframe" data-src=$2$3$2 ' ,
597+ $ imgHTML
598+ );
583599
584600 // add the lazy class to the img element
585601 if ( preg_match ( '/class=[" \']/i ' , $ replaceHTML ) ) {
@@ -624,12 +640,24 @@ protected function _filter_videos( $content, $include_noscript = null ) {
624640
625641
626642 $ replaceHTML = '' ;
627- $ replaceHTML = preg_replace ( '/video(.*?)src=/is ' , 'video$1 data-lazy-type="video" data-src= ' , $ imgHTML );
643+ $ replaceHTML = preg_replace (
644+ '/<video\b((?:(?:"[^"]*")|(?: \'[^ \']* \')|[^" \'<>])*)\s+src=([" \'])(.*?)\2/is ' ,
645+ '<video$1 data-lazy-type="video" data-src=$2$3$2 ' ,
646+ $ imgHTML
647+ );
628648
629649 if ( ! preg_match ( "/ data-poster=[' \"]/is " , $ replaceHTML ) ) {
630- $ replaceHTML = preg_replace ( '/video(.*?)poster=/is ' , 'video$1poster=" ' . $ this ->_placeholder_url . '" data-lazy-type="video" data-poster= ' , $ replaceHTML );
631- } elseif ( preg_match ( "/ poster=[' \"]/is " , $ replaceHTML ) ) {
632- $ replaceHTML = preg_replace ( '/ poster=([" \'])(.*?)[" \']/is ' , ' poster=" ' . $ this ->_placeholder_url . '" ' , $ replaceHTML );
650+ $ replaceHTML = preg_replace (
651+ '/<video\b((?:(?:"[^"]*")|(?: \'[^ \']* \')|[^" \'<>])*)\s+poster=([" \'])(.*?)\2/is ' ,
652+ '<video$1 poster=" ' . $ this ->_placeholder_url . '" data-lazy-type="video" data-poster=$2$3$2 ' ,
653+ $ replaceHTML
654+ );
655+ } elseif ( preg_match ( "/\sposter=[' \"]/is " , $ replaceHTML ) ) {
656+ $ replaceHTML = preg_replace (
657+ '/\sposter=([" \'])(.*?)\1/is ' ,
658+ ' poster=" ' . $ this ->_placeholder_url . '" ' ,
659+ $ replaceHTML
660+ );
633661 } else {
634662 $ replaceHTML = preg_replace ( '/<video/is ' , '<video poster=" ' . $ this ->_placeholder_url . '" ' , $ replaceHTML );
635663 }
@@ -678,7 +706,11 @@ protected function _filter_videos( $content, $include_noscript = null ) {
678706 // replace the src and add the data-src attribute
679707 $ replaceHTML = '' ;
680708 //$replaceHTML = str_replace("src", 'data-src', $imgHTML);
681- $ replaceHTML = preg_replace ( '/embed(.*?)src=/is ' , 'embed$1 data-lazy-type="video" data-src= ' , $ imgHTML );
709+ $ replaceHTML = preg_replace (
710+ '/<embed\b((?:(?:"[^"]*")|(?: \'[^ \']* \')|[^" \'<>])*)\s+src=([" \'])(.*?)\2/is ' ,
711+ '<embed$1 data-lazy-type="video" data-src=$2$3$2 ' ,
712+ $ imgHTML
713+ );
682714 // add the lazy class to the img element
683715 if ( preg_match ( '/class=[" \']/i ' , $ replaceHTML ) ) {
684716 $ replaceHTML = preg_replace ( '/class=([" \'])(.*?)[" \']/is ' , 'class=$1lazy lazy-hidden $2$1 ' , $ replaceHTML );
0 commit comments