![]() |
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:
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:
So when you type some word in Russian which consists of 5 letter it will look like: PHP Code:
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:
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:
PHP Code:
functions.php PHP Code:
|
Quote:
In UTF8 any character in the Unicode standard, yet the initial encoding of byte codes and character assignments for UTF-8 is backwards compatible with ASCII. So, dependency of character it may be represent from 1 (first 127 characters ASCII) to 4 bytes. Russian Cyrillic characters in UTF-8 represents by 2 byte per character. Your example is strange, and I can't represent it on my system. I'm guess what you meant HTML mnemonic entities, but in this case mnemonic must look like PHP Code:
PHP Code:
Quote:
On my board on UTF-8 with database collation utf8_general_ci I'm haven't this troubles - all Russian and many more characters saved as is, without similar transformation. Quote:
So, if you wish cut by characters, you just may use multibyte functions like mb_substr() (which comes from mbstring extension) or iconv_substr() (this is from "more standard" and widely distributed iconv). So, if none of this extension available, in multibyte strings, you may safely emulate substr by regular expression on this manner: PHP Code:
Or, for clarity, you may wrap it in function, if wish: PHP Code:
|
Quote:
PHP Code:
Try to post something like: PHP Code:
You will get this one: PHP Code:
|
With VBB 3.7 , Has it effect ?
|
This post will apply regardless of vBulletin version - it will apply as long the the substr() function behaves like it currently does.
|
All times are GMT. The time now is 05:29 AM. |
Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
![]() |
|
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|