Ромбики з питаннями замість букв кирилиці

Ромбики з питаннями замість букв кирилиці в закінченнях тексту виведеного в модулях або компонентах - це кошмар. Причому якби всі букви кирилиці виводилися у вигляді таких ромбів, зазвичай чорних з білими питаннями, але бувають в основному в колір тексту, то це було б зрозуміло, і ми б відразу зрозуміли, що причина в неправильному кодуванні файлів, а саме потрібні файли не мають кодування UTF-8. Рішення тут досить просте, пере зберегти неправильно виведений текст в UTF-8. Але в нашому випадку звістка текст кирилиці виводиться модулями правильно і тільки останній знак замінюється на ромб з питанням. Можна було б, звичайно просто плюнути на цей факт, але ми з Вами повинні докопатися до причини такого казусу і усунути його. До того ж цей факт несе в собі і приховані, але досить неприємні загрози. Ваш сайт неправильно читається браузерами. При спробі піддати валідації ту сторінку сайту, де виводиться це неподобство, сервіси блокують перевірку і виводять повідомлення, що не можуть провести перевірку через наявність тексту збереженого не в UTF-8. А це вже пряма загроза того, що Ваш сайт може бути ранжований нижче своїх можливостей, або сторінки виключать з пошуку пошукові роботи. Так що ж робити? Я помітив такі викрутаси на двох модулях, які були мною завантажені з офіційних сайтів розробників.

Ромбики з питаннями замість букв кирилиці
Але мабуть їх мало хвилюють наші проблеми із застосуванням кирилиці, або вони просто про це не подумали тому і допустили це. Найнеприємніше, що в парі шаблонів не було помічено подібних глюків, мабуть всередині цих наворочених монстрів якось враховувалася ця функція. А винна в цьому саме функція, яка називається substr (). Ця функція автоматичної обрізки тексту, що виводиться в модулях і компонентах Joomla.

Визначення: SUBSTR - Функція призначена для отримання підрядка або заміни частини рядка. Але ж існує подібна функція, але вона більш підходить для нас. MB_SUBSTR - Функція призначена для отримання мультібайтной (UTF-8) підрядка або заміни частини рядка. Здогадуєтеся, що потрібно зробити? Правильно. Потрібно замінити функцію substr, яка явно не справляється з мультібайтной UTF-8 обрізанням рядка на функцію mb_substr. Просто міняємо.

PS Після всіх маніпуляцій обрізка рядки виділеної тегами відбувається некоректно, так що просто уникайте виділення на початку статті. Але якщо у Вас є рішення, напишіть про це в коментах я перевірю і опублікую.