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

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

inser PHP вставка пробела после каждых N символовНе очень часто возникает надобность, во вставке пробела в строке, после заданного 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
    // удачи.

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

Консультации

Консультант Чернышов Р.В. Зайдайте вопрос на любую из тем:
Бесплатно и без регистрации!

Задать вопрос
Все вопросы
Последние вопросы
Поиск по блогу
Категории
Архив
Новое на сайте
Портфолио Все работы


www.detskiy-mir.net
www.detskydoctor.ru
www.betelit.ru
www.all-alliance.ru
www.videogonok.ru
www.carpfishing.by
www.property-greek.com
www.domcons.ru

с 2009 года по сегодняшний день, создано более 300 сайтов...