Ticket #9055 (closed defect (bug): fixed)
mb_strcut in wp_html_excerpt seems to count bytes (not characters). Use mb_substr instead?
| Reported by: |
|
Owned by: |
|
|---|---|---|---|
| Priority: | normal | Milestone: | 2.8 |
| Component: | I18N | Version: | 2.8 |
| Severity: | normal | Keywords: | has-patch tested needs-testing |
| Cc: | dkikizas@… |
Description
The result is that strings with multibyte characters are cut too short.
An instance of this can be seen on edit-comments.php. I have a post with this title:
αβγδεζηθικλμνξοπρστυφχψω ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
... which is 49 characters long (the 24 letters of the Greek alphabet + 1 space + the 24 letters in capital form), that is, just below the cut-off limit (50). But WP cuts the string after the 25th character, displaying:
Edit Comments on “αβγδεζηθικλμνξοπρστυφχψω ”
Replacing mb_strcut with mb_substr in wp_html_excerpt seems to fix this. I tried with Japanese and with Greek on WP 2.7 branch and on WP trunk and everything SEEMS to be OK.
Is there a reason mb_substr was not used there? Maybe some issue that has been resolved in the meantime?
Please note that I’m not a coder and that much of this stuff goes over my head. :-)
Attachments
Change History
-
attachment
r10506-wphtmlexcerpt-mbstrcut-mbsubstr.diff
added
- Status changed from new to closed
- Resolution set to fixed
comment:2
nbachiyski — 3 years ago
- Status changed from closed to reopened
- Resolution fixed deleted
We have a pure php implementation of mb_strcut and if we use mb_substr(), we'll need it implemented too for installs, without the mbstring extension.
I now remembered, that in the beginning we used mb_strcut(), because we needed to limit database fields, which are counted in bytes. However, now we are using it only in wp_html_excerpt in which case mb_substr() really makes more sense.
comment:4
nbachiyski — 3 years ago
It turns out that _mb_strcut()} works exactly like mb_substr and not as mb_strcut. We just need to rename _mb_strcut to _mb_substr and make the new compat function use it.
- Status changed from reopened to closed
- Resolution set to fixed

Tentatively replaces mb_strcut with mb_substr in wp_html_excerpt