[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Русская кодировка
ShalfeyShalfeev
Я Чайник . Пробую писать PHP код. У меня не работает команда перевода строки в массив. Сервер от " ирбиса" поставил на комп. Хочу сыну маленькую прогу сделать . Заодно потренироваться. На С++ тяжело даётся на PHP проще но, не переводится строка русская в массив.



Спустя 39 минут, 26 секунд (13.09.2011 - 18:41) Winston написал(а):
Цитата (ShalfeyShalfeev @ 13.09.2011 - 18:02)
не переводится строка русская в массив.

Почему это ?
$str = 'Строка';
echo $str[0] . '<br/>';
echo $str[1] . '<br/>';
echo $str[2] . '<br/>';

Очень даже переводится.

Спустя 20 секунд (13.09.2011 - 18:41) inpost написал(а):
Показывай код, как ты пытаешься сделать.

Спустя 23 часа, 38 минут, 27 секунд (14.09.2011 - 18:20) ShalfeyShalfeev написал(а):

$str="авс";


$arr=str_split($str);
print"<PRE>";


print_r($arr);
print"<PRE>";

Спустя 15 минут, 24 секунды (14.09.2011 - 18:35) YVSIK написал(а):
echo  $str='авс'. '<br/>';
echo $arr=str_split($str). '<br/>' ;
echo '<br>Гость';


примерно так

Спустя 5 минут, 23 секунды (14.09.2011 - 18:41) Winston написал(а):
Цитата (ShalfeyShalfeev @ 14.09.2011 - 18:20)
$str="авс";


$arr=str_split($str);
print"<PRE>";


print_r($arr);
print"<PRE>";


Это должно успешно отработать. А какая у вас кодировка файла ?

Спустя 8 минут, 23 секунды (14.09.2011 - 18:49) YVSIK написал(а):

Спустя 1 минута, 20 секунд (14.09.2011 - 18:50) Winston написал(а):
YVSIK
Да нет, здесь дело в кодировке...

Спустя 2 минуты, 55 секунд (14.09.2011 - 18:53) walerus написал(а):
1) Файл( скрипт ) в какой кодировке ? должен быть в utf-8 без BOM.
2) $str="авс"; - это Русские буквы ? или латиница.
3) Строка разбивается, но выдаются иероглифы.

если все сделать правильно, то:

function f_str_split( $string = '' )
{
if ( is_array( $string ) )
return $string;

$string = iconv('utf-8', 'windows-1251', $string); // Сменили кодировку на кирилицу

$array = str_split( $string );
foreach( $array as $key => $value)
$array[$key] = iconv( 'windows-1251', 'utf-8', $value ); // Сменили кодировку на латиницу

return $array;
}


$str = "авс";

echo "<PRE>";
print_r( f_str_split( $str ) );
echo "</PRE>";
?>

Спустя 5 минут, 52 секунды (14.09.2011 - 18:59) Winston написал(а):
Цитата (walerus @ 14.09.2011 - 18:53)
foreach( $array as $key => $value)
      $array[$key] = iconv( 'windows-1251', 'utf-8', $value ); // Сменили кодировку на латиницу
   
    return $array;   

Можно проще
return array_map(create_function('$item', 'return iconv( "windows-1251", "utf-8", $item);'), $array);

Спустя 8 минут, 18 секунд (14.09.2011 - 19:07) walerus написал(а):
Winston - буду скоро брать у тебя курсы по изучению встроенных функций )))

Спустя 1 минута, 4 секунды (14.09.2011 - 19:08) Winston написал(а):
smile.gif

Спустя 10 минут, 23 секунды (14.09.2011 - 19:19) ShalfeyShalfeev написал(а):
Ура всё получилось спасибо братья , теперь буду разбираться с кодом. Главное понять , а не просто скопировать Спасибо walerus по твоему скрипту получилось. Читаю книгу Крис Ньюман " 10 минут на урок". Там азы . Без форума не разберёшся.

Спустя 28 минут, 31 секунда (14.09.2011 - 19:47) twin написал(а):
   function f_str_split( $string = '' )
{
if ( is_array( $string ) )
return $string;

preg_match_all('#([\s\S]{1})#us', $string, $out);
return $out[0];
}


$str = "Кириллица";
echo "<PRE>";
print_r( f_str_split($str) );
echo "</PRE>";

Спустя 11 минут (14.09.2011 - 19:58) walerus написал(а):
twin blink.gif
Человек изучает азы ), а тут и я курить буду минут 3 - 5 laugh.gif

Спустя 1 минута, 28 секунд (14.09.2011 - 20:00) Winston написал(а):
twin
Я тоже, что-то не въехал с регуляркой huh.gif

Спустя 3 минуты, 11 секунд (14.09.2011 - 20:03) twin написал(а):
А не надо изучать азы неправильно)) Накой столько телодвижений, когда одной строкой можно решить.

И чего там курить... Простейшая регулярка и функция, описанная в мануале.

\s - пробел, \S - непробел. [\s\S] - пробел + непробел (любой символ) {1} - в количестве 1 штука.

Спустя 3 минуты, 59 секунд (14.09.2011 - 20:07) Winston написал(а):
Цитата (twin @ 14.09.2011 - 20:03)
\s - пробел, \S - непробел. [\s\S] - пробел + непробел (любой символ) {1} - в количестве 1 штука.

Это понятно, а модификатор "u" зачем ?

Спустя 2 минуты, 13 секунд (14.09.2011 - 20:09) twin написал(а):
Вообще можно проще:
'#.{1}#us'

u - модификатор для UTF

Вот почитай тут. Много интересного.

Спустя 1 минута, 46 секунд (14.09.2011 - 20:11) Winston написал(а):
Цитата (twin @ 14.09.2011 - 20:09)
Вот почитай тут. Много интересного

Знаю, я же писал большинство этих статей по регуляркам smile.gif
Цитата (twin @ 14.09.2011 - 20:09)
u - модификатор для UTF

Блин, дык у него же в CP1251 походу unsure.gif

Спустя 2 минуты, 44 секунды (14.09.2011 - 20:14) twin написал(а):
Нет. утф у него. В CP строку можно разбивать в массив так $str[0] и функция str_split() тоже работает

Спустя 1 минута, 15 секунд (14.09.2011 - 20:15) killer8080 написал(а):
twin
регулярку можно ещё сократить
'#.#us'

Спустя 15 минут, 45 секунд (14.09.2011 - 20:31) twin написал(а):
Цитата (killer8080 @ 14.09.2011 - 17:15)
twin
регулярку можно ещё сократить
'#.#us'

Можно. Но если быть дотошным до конца, то нужен второй параметр:
   function f_str_split( $string = '', $lenght = 1 )
{
if ( is_array( $string ) )
return $string;

preg_match_all('#.{'. $lenght .'}#us', $string, $out);
return $out[0];
}


$str = "Кирил лица";
echo "<PRE>";
print_r( f_str_split($str, 2));
echo "</PRE>";
Быстрый ответ:

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