View Single Post
  #1  
Old 02-10-2008, 01:41 PM
Tefra's Avatar
Tefra Tefra is offline
 
Join Date: Mar 2005
Posts: 68
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Autolink strings in custom mod

I have created a custom terminology/glossary mod for vb, and i have also included a simple function to auto link to other terms. but i have two major issues. It breaks html tags.

Any help is appreciated, the preg_replace in line 15 is the vbulletin method to highlight strings, if that helps...

PHP Code:
function terms_build_relation($message$intermid 0)
{
    global 
$db;

    
$words         = array();
    
$keywords     $db->escape_string(strip_tags($message));
    
$sql         $db->query_read("SELECT term_id, term_title FROM ".VBSED_PREFIX."terms WHERE MATCH(term_title) AGAINST('$keywords') ".iif($intermid"AND term_id <> $intermid"'')." AND term_active = 1");
                    
    while(
$sim $db->fetch_array($sql)) {    $words[$sim['term_id']] = $sim['term_title']; }
    
    
$message str_replace('\"''"'$message);
    foreach (
$words AS $key => $rep)
    {
        if(
in_array(strtolower($rep), array('http''https''ftp'))) continue; //Not Good Enough
        
$message preg_replace('#(?<=[\s"\]>()]|^)(' $rep ')(([.,:;-?!()\s"<\[]|$))#siU''[term='.$key.']\\1[/term]\\2'$message1);
    }
    
$message ereg_replace('\\[term=([0-9]+)\\]([^\\[]*)\\[/term\\]''<em><a href="'.VBSED_TERMS_URL.'item=\\1">\\2</a></em>'$message);
    
$message ereg_replace('\\[term=([0-9]+)\\]([^\\[]*)\\[/term\\]''\\2'$message); // BUG Step 1!!! Remove any open term bbcode
    
return $message;    

The second issue is that sometimes it breaks into other autolinked terms, that's why in the end i replace any open term bbcode.

For example, there are the terms "system" and "system registry". In a 3rd term definition there is the string "system registry". In the first pass it replaces the "system" term but in the second pass it tries to replace the whole string "system registry" Here comes in hand the removal of the empty term bbcode. This isn't a great issue as the first one as i believe if the first issue is fixed this will also be gone.

You can check it out here
Here is an example breaking img tag with the tag parameter.
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01594 seconds
  • Memory Usage 1,792KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_php
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete