Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 General Discussions
FAQ Community Calendar Today's Posts Search

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #1  
Old 01-20-2007, 12:37 AM
Makc666's Avatar
Makc666 Makc666 is offline
 
Join Date: Dec 2002
Location: MSK-RU
Posts: 392
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default substr is BAD! fetch_trimmed_title is GOOD!

A little note for all coders.

I was inspecting MOD:
Cyb - Advanced Forum Statistics
https://vborg.vbsupport.ru/showthread.php?t=122986

And saw that php's substr(); function is used there.
For example:
PHP Code:
$getstats_starter[username] = substr($getstats_starter[username], 0$trimusername) . '...'
substr(); is a bad one for cutting words up to set limit.

You have to use fetch_trimmed_title(); function which is built-in vbulletin.

You asked why?
1-st, VB's uses this function to cut thread titles.
2-nd, most forum uses UTF8.

For example Russian letter in UTF-8 will look like:
PHP Code:
&_236
(you have to replace _ with #)
So when you type some word in Russian which consists of 5 letter it will look like:
PHP Code:
&_236;&_236;&_236;&_236;&_246
(you have to replace _ with #)
And in this way it is storied in databse.
So it it 30 symbols if you count.

When you use substr(); function you cut by symbols and not by letters!

So if you set to with substr(); function to cut after 27 letter and you will cut the example above you will get:
PHP Code:
&_236;&_236;&_236;&_236;&_2 
As you see the last letter in UTF-8 format was cuted.

And when this one will be displayed on the webpage you will see a bug.

That is why you have to use fetch_trimmed_title(); function.
As it cuts only whole words.
fetch_trimmed_title() relies on spaces when cutting.

If me return to
Cyb - Advanced Forum Statistics
https://vborg.vbsupport.ru/showthread.php?t=122986

in all code I replaced lines like:
PHP Code:
$getstats_starter[username] = substr($getstats_starter[username], 0$trimusername) . '...'
with a good one:

PHP Code:
$getstats_starter[username] = fetch_trimmed_title($getstats_starter[username], $trimusername); 
Here how this function looks like in:
functions.php

PHP Code:
// #############################################################################
/**
* Trims a string to the specified length while keeping whole words
*
* @param        string  String to be trimmed
* @param        integer Number of characters to aim for in the trimmed string
*
* @return       string
*/ 
Reply With Quote
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 05:10 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.07559 seconds
  • Memory Usage 2,429KB
  • Queries Executed 12 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (18)bbcode_php
  • (4)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (5)post_thanks_box
  • (5)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (5)post_thanks_postbit_info
  • (5)postbit
  • (5)postbit_onlinestatus
  • (5)postbit_wrapper
  • (1)showthread_list
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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_threadedmode.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids_threaded
  • showthread_threaded_construct_link
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • 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
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete