Thread: Major Additions - Links and Downloads Manager
View Single Post
  #990  
Old 08-30-2008, 03:33 AM
derfelix derfelix is offline
 
Join Date: Nov 2001
Posts: 204
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hi andrew...
I did some tests
with german umlaut.. (???) or french accents (? ? ? ? ?) my fix above seems to work...
BUT
with chinese... AAAAAAAAAAAAAAAGH.... you are right.. that is a pain....

but i think i narrowed it down.. BUT i would need some help..

OK.. the problem is.. in UTF-8 with multibyte characters.. there is a preg_replace problem..
(dont ask me why)

The problem is in the line..:
PHP Code:
// Apply highlighting to each of the substrings
    
$resstrings preg_replace($find$replace$substrings); 
(its the $find that doesnt work for UTF-8 chinese)

I ran some examples with dummy strings.. (notice the /u modifier was added)
example :
PHP Code:
$resstrings preg_replace("/(\b???\b)/iu"" Replaced: $1 ""test ??? test"); 
will give: test Replaced: ??? test
==> works!!!

but:
PHP Code:
$resstrings preg_replace("/(\b欢迎您\b)/iu"" Replaced: $1 ""欢迎欢迎您 欢迎"); 
will give: 欢迎欢迎您 欢迎
==> no highlight
------------
The problem whith characters like chinese seems to be the boundary \b
so i tried:
PHP Code:
$resstrings preg_replace("/(" preg_quote("欢迎您") . ")/iu"" Replaced: $1 ""欢迎欢迎您 欢迎"); 
will give: 欢迎 Replaced: 欢迎您 欢迎
==> works.. chinese text is highlighted..!!!!!

BUT.. my question.. is there a drawback?????
not using the boundary \b ???
i used the preg_quote just to avoid $1 errors.. but i guess its not really needed..

to implement this in LDM it would be:
in local_links_include.php in function ldm_make_highlight_regex
find:
PHP Code:
$find[] = '/(\b'.$w.'\b)/i'
replace with:
PHP Code:
$find[] = '/('.preg_quote($w).')/iu'
actually i would also (maybe) add @ in front of the preg_replace in $resstrings = preg_replace($find, $replace, $substrings);
i have ran some tests with keywords in chinese.. they highlight... tried message-text: works also...
PLEASE TEST...!!!!
Felix
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01288 seconds
  • Memory Usage 1,781KB
  • 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
  • (6)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