function strpos_recursive($haystack, $needle, $offset = 0, &$results = []) { $offset = strpos($haystack, $needle, $offset); if ($offset === false) { return $results; } else { $results[] = $offset; return strpos_recursive($haystack, $needle, $offset + 1, $results); } }
function findHashtagInString($hashtag, $string, $default = false) { // we find all matches against one hashtag global $preferences; $positions = null; strpos_recursive($string, "#" . $hashtag, 0, $positions); // and see if any are actually a tag and not just part of the // keywords (like "film") if ($positions != null) { foreach ($positions as $position) { if ($position !== false && !$preferences->keywordExistsAtPosition($string, $position)) { // return the all columns! return $position; } } } return $default; }
//$search_term = $_GET['s']; $search_term_length = strlen($search_term); $final_result = array(); $files = list_files($search_dir); foreach ($files as $file) { $contents = file_get_contents($file); preg_match("/\\<title\\>(.*)\\<\\/title\\>/", $contents, $page_title); //getting page title if (preg_match("#\\<body.*\\>(.*)\\<\\/body\\>#si", $contents, $body_content)) { //getting content only between <body></body> tags $clean_content = strip_tags($body_content[0]); //remove html tags $clean_content = preg_replace('/\\s+/', ' ', $clean_content); //remove duplicate whitespaces, carriage returns, tabs, etc //$found = strpos_recursive($clean_content, $search_term); $found = strpos_recursive(mb_strtolower($clean_content, 'UTF-8'), $search_term); $final_result[$file_count]['page_title'][] = $page_title[1]; $final_result[$file_count]['file_name'][] = $file; } if ($found && !empty($found)) { for ($z = 0; $z < count($found[0]); $z++) { $pos = $found[0][$z][1]; $side_chars = SIDE_CHARS; if ($pos < SIDE_CHARS) { $side_chars = $pos; $pos_end = SIDE_CHARS + $search_term_length; } else { $pos_end = SIDE_CHARS * 2 + $search_term_length; } $pos_start = $pos - $side_chars; $str = substr($clean_content, $pos_start, $pos_end);
//$search_term = $_GET['s']; $search_term_length = strlen($search_term); $final_result = array(); $files = list_files($search_dir); foreach ($files as $file) { $contents = file_get_contents($file); preg_match("/\\<title\\>(.*)\\<\\/title\\>/", $contents, $page_title); //getting page title if (preg_match("#\\<body.*\\>(.*)\\<\\/body\\>#si", $contents, $body_content)) { //getting content only between <body></body> tags $clean_content = strip_tags($body_content[0]); //remove html tags $clean_content = preg_replace('/\\s+/', ' ', $clean_content); //remove duplicate whitespaces, carriage returns, tabs, etc } $found = strpos_recursive($clean_content, $search_term); $final_result[$file_count]['page_title'][] = $page_title[1]; $final_result[$file_count]['file_name'][] = $file; if ($found && !empty($found)) { for ($z = 0; $z < count($found[0]); $z++) { $pos = $found[0][$z][1]; $side_chars = SIDE_CHARS; if ($pos < SIDE_CHARS) { $side_chars = $pos; $pos_end = SIDE_CHARS + $search_term_length; } else { $pos_end = SIDE_CHARS * 2 + $search_term_length; } $pos_start = $pos - $side_chars; $str = substr($clean_content, $pos_start, $pos_end); $result = preg_replace('#' . $search_term . '#ui', '<span class="search">\\0</span>', $str);