[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Цикл в цикле + УТФ-8
forza

$search = 'вася'
$query = NULL;

for ($i = 0; $i < mb_strlen($search, "UTF-8"); $i++) {
for($j = 0; $j < mb_strlen($search, "UTF-8"); $j++) {
if($i == $j)
$query .= '_';
else
$query .= $search[$j];

}
$query .= '<br/>';
}
echo $query;


в результате выводит :

_�а
�_а
в_�
в�_

а мне нужно, чтоб выводило :

_ася
в_ся
ва_я
вас_

В чем может быть проблема?



Спустя 6 минут, 32 секунды (6.05.2011 - 13:29) linker написал(а):
А сам скрипт в какой кодировке сохранён?

Спустя 6 минут, 34 секунды (6.05.2011 - 13:35) forza написал(а):
Скрипт-файл .пхп сохранен в УТФ-8,
В пхп.ини тоже поставил default-charset = "utf-8"

P.S.
ну и конечно заголовок
header("Content-type:text/html; charset=utf-8");

Кстате, такой цикл не выводит не понятных символов, а вот вложенный уже да.


for ($i = 0; $i < mb_strlen($search, "utf-8"); $i++)
echo $search[$i].'<br />';

Спустя 18 минут, 8 секунд (6.05.2011 - 13:54) linker написал(а):
А ну да, вот такая бойда с utf-8 не проходит $search[$j];, напиши просто
echo $search[0];
и получишь полную фигню. Символ "_" попадает между двумя байтами одного символа, от сюда и абракадабра.

Спустя 15 минут, 21 секунда (6.05.2011 - 14:09) forza написал(а):
Ммм, и я так понял, от этого уже никуда не деться и никак не исправить ?
Тогда подскажите, как из слова "вася" получить
_ася
в_ся
ва_я
вас_

как-нибудь по-другому ?

Спустя 1 час, 2 минуты, 45 секунд (6.05.2011 - 15:12) linker написал(а):
Первое, что на ум пришло
$a = 'Вася';
$arr = preg_split('//u', $a, -1, PREG_SPLIT_NO_EMPTY);
$l = sizeof($arr);
for($i = 0; $i < $l; ++ $i)
{
for($j = 0; $j < $l; ++ $j)
echo $i == $j ? '_' : $arr[$j];
echo '<br>';
}

Спустя 4 минуты, 45 секунд (6.05.2011 - 15:16) forza написал(а):
linker , спасибо :) замечательно работает
Просто мне вот что пришло на ум, но я думаю мой вариант далеко не оптимальный

for($i = 0; $i < mb_strlen($search, 'utf-8'); $i++) {
$var .= mb_substr($search, 0, $i, 'utf-8').'_'.mb_substr($search, $i+1,strlen($search), 'utf-8').'<br/>';
}

echo $var;

Спустя 35 минут, 41 секунда (6.05.2011 - 15:52) linker написал(а):
$len = mb_strlen($search, 'utf-8');
$var = '';
for($i = 0; $i < $len; $i++)
$var .= mb_substr($search, 0, $i, 'utf-8').'_'.mb_substr($search, $i+1, $len, 'utf-8').'<br/>';

echo $var;
Будет чуть быстрее работать.

Спустя 1 час, 35 минут, 58 секунд (6.05.2011 - 17:28) forza написал(а):
Ого, честно говоря, не знал, что

$len = mb_strlen($search, 'utf-8');
for($i = 0; $i < $len; $i++) ...


быстрее чем.

for($i = 0; $i < mb_strlen($search, 'utf-8'); $i++)


Надо взять на заметку.

Спустя 10 минут, 22 секунды (6.05.2011 - 17:38) Invis1ble написал(а):
forza
Так там на каждой итерации во втором варианте отрабатывает функция, поэтому и медленней

Спустя 1 минута, 46 секунд (6.05.2011 - 17:40) forza написал(а):
Ну вот, поэтому и возьму на заметку, а то раньше никогда не задумывался об этом. Всем спасибо за ответы, тему можно закрыть.


_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.