예제 #1
0
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;
}
예제 #3
0
//$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);
예제 #4
0
파일: results.php 프로젝트: iqus/training
//$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);