From c3094275ef3f49d92ae6cdd694637acf22a237cc Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Tue, 19 Jun 2007 01:20:00 +0000 Subject: [PATCH] Fix PHP4 compatibility problems with substr_count git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1163 48356398-32a2-884e-a903-53898d9a118a --- library/HTMLPurifier/Lexer/DirectLex.php | 30 ++++++++++++++++++------ 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/library/HTMLPurifier/Lexer/DirectLex.php b/library/HTMLPurifier/Lexer/DirectLex.php index fa9d541a..e5643758 100644 --- a/library/HTMLPurifier/Lexer/DirectLex.php +++ b/library/HTMLPurifier/Lexer/DirectLex.php @@ -71,7 +71,7 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer $cursor > 0 && // cursor is further than zero $loops % $synchronize_interval === 0 // time to synchronize! ) { - $current_line = 1 + substr_count($html, $nl, 0, $cursor); + $current_line = 1 + $this->substrCount($html, $nl, 0, $cursor); } $position_next_lt = strpos($html, '<', $cursor); @@ -96,7 +96,7 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer ); if ($maintain_line_numbers) { $token->line = $current_line; - $current_line += substr_count($html, $nl, $cursor, $position_next_lt - $cursor); + $current_line += $this->substrCount($html, $nl, $cursor, $position_next_lt - $cursor); } $array[] = $token; $cursor = $position_next_lt + 1; @@ -137,7 +137,7 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer ); if ($maintain_line_numbers) { $token->line = $current_line; - $current_line += substr_count($html, $nl, $cursor, $position_next_gt - $cursor); + $current_line += $this->substrCount($html, $nl, $cursor, $position_next_gt - $cursor); } $array[] = $token; $inside_tag = false; @@ -152,7 +152,7 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer $token = new HTMLPurifier_Token_End($type); if ($maintain_line_numbers) { $token->line = $current_line; - $current_line += substr_count($html, $nl, $cursor, $position_next_gt - $cursor); + $current_line += $this->substrCount($html, $nl, $cursor, $position_next_gt - $cursor); } $array[] = $token; $inside_tag = false; @@ -174,7 +174,7 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer ); if ($maintain_line_numbers) { $token->line = $current_line; - $current_line += substr_count($html, $nl, $cursor, $position_next_gt - $cursor); + $current_line += $this->substrCount($html, $nl, $cursor, $position_next_gt - $cursor); } $array[] = $token; $cursor = $position_next_gt + 1; @@ -203,7 +203,7 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer } if ($maintain_line_numbers) { $token->line = $current_line; - $current_line += substr_count($html, $nl, $cursor, $position_next_gt - $cursor); + $current_line += $this->substrCount($html, $nl, $cursor, $position_next_gt - $cursor); } $array[] = $token; $inside_tag = false; @@ -235,7 +235,7 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer } if ($maintain_line_numbers) { $token->line = $current_line; - $current_line += substr_count($html, $nl, $cursor, $position_next_gt - $cursor); + $current_line += $this->substrCount($html, $nl, $cursor, $position_next_gt - $cursor); } $array[] = $token; $cursor = $position_next_gt + 1; @@ -259,6 +259,22 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer return $array; } + /** + * PHP 4 compatible substr_count that implements offset and length + */ + function substrCount($haystack, $needle, $offset, $length) { + static $oldVersion; + if ($oldVersion === null) { + $oldVersion = version_compare(PHP_VERSION, '5.1', '<'); + } + if ($oldVersion) { + $haystack = substr($haystack, $offset, $length); + return substr_count($haystack, $needle); + } else { + return substr_count($haystack, $needle, $offset, $length); + } + } + /** * Takes the inside of an HTML tag and makes an assoc array of attributes. *