PHP вставка пробела после каждых N символов

Author Роман Чернышов    Category PHP     Tags Комментариев 3 Дата 25 Май

Не очень часто возникает надобность, во вставке пробела в строке, после заданного N количества символов, причем пробел необходимо вставить через каждые N символов. Но все же такая задача встречается и порой играет важную роль в проекте.

В поисках решения я воспользовался поиском и все, что нашел, к сожалению не соответствовало моим требованиям.

Более того многие примеры кода, неправильно обрабатывали кириллицу в кодировке UTF-8 (иногда вставка пробела приходилась между двумя байтами одного символа, в результате символ отображался как вопрос). В итоге пришлось немного допилить найденный мною пример:

function add_pr ($str,$count)
{
$str=iconv('UTF-8','WINDOWS-1251',$str);
$i = 0;$no_pr = 0;$j = 1;
while ($i < strlen($str))
{
$text[$j] = $text[$j].$str[$i];
if ($str[$i] == ' '){$no_pr = 0;$j = $j+1;}
if ($str[$i] != ' '){$no_pr = $no_pr+1;}
if ($no_pr == $count){$text[$j] = $text[$j].' ';$no_pr = 0;}
$i = $i+1;
}
while ($j != 0){$st = $st.$text[$j];$j = $j-1;}
$st=iconv('WINDOWS-1251','UTF-8',$st);
return $st;
}

Обратите внимания данная функция работает с текстом в кодировке WINDOWS-1251, поэтому мы предварительно конвертируем строку из UTF-8. Иначе вместо строки с расставленными пробелами можно получить сплошные каракули (или вопросы).

Надеюсь эта функция кому нибудь пригодится. Просто мысли вслух)

3 комментария to “PHP вставка пробела после каждых N символов”

  • костя 26.03.2013 в 3:10 пп

    у меня не работает, пробовал закоментить все строки
    как я понял вылетает на циклах
    страница просто перестает отображаться, решил даже так сделать:
    function add_pr($str,$count)
    {
    if (!empty($str))
    {
    $str=iconv(‘UTF-8′,’WINDOWS-1251’,$str);
    $i = 0;$no_pr = 0;$j = 1;
    $len = strlen($str);
    while ($i < $len)
    {
    $text[$j] = $text[$j].$str[$i];
    if ($str[$i] == ‘ ‘){$no_pr = 0;$j = $j+1;}
    if ($str[$i] != ‘ ‘){$no_pr = $no_pr+1;}
    if ($no_pr == $count){$text[$j] = $text[$j].’ ‘;$no_pr = 0;}
    $i = $i+1;
    }
    while ($j != 0)
    {
    $st = $st.$text[$j];$j = $j-1;
    }
    $st=iconv(‘WINDOWS-1251′,’UTF-8’,$st);
    return $st;
    }
    }

  • костя 26.03.2013 в 3:29 пп

    function add_pr ($str,$count)
    {
    $i = 0;
    $no_pr = 0;
    $j = 1;
    while ($i < strlen($str))
    {
    $text[$j] = $text[$j].$str[$i];
    if ($str[$i] == ' ')
    {
    $no_pr = 0;
    $j = $j+1;
    }
    if ($str[$i] != ' ')
    {
    $no_pr = $no_pr+1;
    }
    if ($no_pr == $count)
    {
    $text[$j] = $text[$j].' ';
    $no_pr = 0;
    }
    $i = $i+1;
    }
    while ($j != 0)
    {
    print $j."";
    $st = $st.$text[$j];
    $j = $j-1;
    }
    return $st;
    }

  • Виктор 02.09.2013 в 2:46 пп

    Есть решение куда проще, красивее и лучше:

    function stan($value, $offset = 3) {
    $v = (string)$value;
    $l = length($v);
    $ret = array();
    for($i=$l; $i>=0; $i—) {
    if(($i % $offset) == 0) $ret[] = » «;
    $ret[] = $v[$l-$i];
    }
    return trim(implode(null, $ret));
    }
    // $offset — через сколько символов ставить пробел!
    // Внимание, данный способ отсчитывает от конца строки, например для преобразование стоимости из 1560980 в 1 560 980 или из 5690 в 5 690
    // удачи.

Оставить комментарий

Об авторе и блоге Чернышов Р.В. Сертификат. Топ 10% лучших фрилансеров, Чернышов Р.В.

Друзья, всем привет!

Меня зовут Роман Чернышов, я веб-разработчик и данный блог посвящен моим проектам и бизнесу.

Тут я делюсь личным опытом
и отвечаю на вопросы. Я всегда готов к сотрудничеству с вами, готов реализовать проект любой сложности(опыт 10+ лет).

Если у вас есть вопросы, предложения, вы хотите совершить покупку моих решений или заказать работу, пишите!



Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка