source: spip-zone/_plugins_/hashtags/trunk/hashtags_fonctions.php @ 107913

Last change on this file since 107913 was 96093, checked in by pierre.laszczak@…, 5 years ago

problème avec simple quote et regexp

File size: 1.7 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) return;
4
5function traitements_hashtags($str, $id_groupe=''){
6
7        # Pattern hashtags!
8        $pattern = "~#(!->|->|!)*(\\w|\\')+(?![^<]*[]>|[^<>]*<\\/)~u";
9
10        if ( preg_match_all($pattern, $str, $matches) ) {
11
12                $tagsBrutes = $matches[0];
13                $tagsPropres = preg_replace('`#(!->|!|->)*`','',$tagsBrutes);
14
15                # Clause where REGEXP... todo: avec like certainement plus rapide ou eventuellement avec in?
16                $where = array(
17                        "titre REGEXP '" . addslashes(implode(array_unique($tagsPropres), '|')) . "'",
18                        "id_groupe=$id_groupe");
19
20                $mots = array();
21                if ( count($tagsPropres) AND $res = sql_allfetsel('id_mot, titre', 'spip_mots', $where) )
22                        foreach ($res as $r)
23                           $mots[$r['titre']] = $r['id_mot'];
24
25                $patterns = array();
26                foreach ($tagsBrutes as $v)
27                        $patterns[] = '/' . $v .  '(?![\w\d])+(?![^<]*[]>|[^<>]*<\\/)/';
28
29                $replacements = array();
30                foreach ( $tagsPropres as $k => $v )
31                        if ( $mots[$v] AND $matches[1][$k] === "!->" )
32                                $replacements[] = "<strong><a href='" . generer_url_entite($mots[$v], 'mot') . "'>" . $v . "</a></strong>";
33                        elseif ( $mots[$v] AND $matches[1][$k] === "->" )
34                                $replacements[] = "<a href='" . generer_url_entite($mots[$v], 'mot') . "'>" . $v . "</a>";
35                        elseif ( $mots[$v] AND $matches[1][$k] === "!" )
36                                $replacements[] = "<strong class=\"hashtag\" data-id-mot=\"$mots[$v]\">" . $v . "</strong>";
37                        elseif ( $mots[$v] )
38                                $replacements[] = "<span class=\"hashtag\" data-id-mot=\"$mots[$v]\">" . $v . "</span>";
39                        else
40                                $replacements[] = $v;
41
42                return preg_replace($patterns,$replacements,$str);
43        }
44
45        return $str;
46}
47
48function nettoyer_raccourcis_hashtags($flux,$option=""){
49        return preg_replace("~#(&nbsp;| )?(!->|->|!)?~u",$option,$flux);
50}
Note: See TracBrowser for help on using the repository browser.