strtr - почему отсутствует аналог в mb_* - функциях и нужен ли он вообще?

bools

Новичок
strtr - почему отсутствует аналог в mb_* - функциях и нужен ли он вообще?

Привет.
Пишу под UTF-8 кодировку.

Понадобилось воспользоваться функцией strtr. Воспользовался.
А потом вспомнил, что для строковых функций нужно юзать mb_* - функции.
А аналога этой функции в мультибайтовых функциях нет.

Я не пойму почему. Он не нужен? или он просто не реализован?

В любом случае,
PHP:
$string = strtr($template, array("{mail}", "[email protected]"));
у меня работает с UTF, как будто с однобайтовой кодировкой. Проблем не возникло.
Почему так?
 

McSimm

Новичок
В общем случае проблемы будут.
strtr() работает побайтно. Если использовать функцию для замены только валидных однобайтных utf-8 символов, то замена будет произведена корректно, такова особенность utf-8 кодирования - однобайтный символ не может быть частью другого многобайтного символа.

Если же вы попытаетесь заменить один многобайтный символ на другой, даже при условии, что они будут одинакового размера, возникнут проблемы - каждый байт первого символа будет заменяться на каждый байт второго.
Например, вы попытаетесь заменить символ "а"(русск) на "я", (utf-8 коды d0b0 и d18f), то все байты d0 исходной строки будут заменены на d1, но байт d0 используется в других символах, не только в "а", результат - ваша строка будет испорчена.
 

bools

Новичок
McSimm

Спасибо за ответ!!

У меня планируется заменять метатеги, типа {taq} на переменные.. Стоит ли ждать от этого проблем? Ибо я не понял, что Вы имели в виду под определннием
валидных однобайтных utf-8 символов
 

McSimm

Новичок
bools
Пропустил в вопросе. Я описывал strtr при посимвольной работе. При работе с массивами все будет ок независимо от размера символов.
 
Сверху