• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Как сделать строку в юникоде?

  • Автор темы amorphius
  • Дата начала
A

amorphius

Есть такой участок кода:
Код:
$a = "фываолдж";
for(my $i=0;$i<8;$i++)
{
print substr($a,$i,1)." ";
}
Все просто, выводит через пробел все буквы строки (она будет русской). В заголовке странице указана кодировка - charset=UTF-8, текст скрипта сохранен в юникоде, но все равно сервер выдает вместо нормальной русской строки вопросительные знаки. Если убрать пробел между буквами, то все отображает корректно. Подскажите пожалуйста в чем проблема?
 
V

Vovochka

Добавте директиву
Код:
use utf8;
В вашем варианте вы выводе не по одному символу, а по одному байту.
Когда же вы убираете пробел, ты два байта одного символа оказываются вместе и получается исходный символ.
Правда в вашем случае выводиться не вся "фываолдж" а лишь "фыва".
 
A

amorphius

substr в смысле плохая функция? чем же мне тогда разбить строку?
 
V

Vovochka

Я же написал.
Код:
use utf8;
И все будет :)
 
A

amorphius

не помогает особо use utf8. вот код еще один
Код:
$alphabet = "АБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ";
for ($i=0;$i<32;$i++)
{
print substr($alphabet,$i,1)." ";
}
выводит как ни странно не весь алфавит, а
Код:
Б Г Е Ж И Ї К М О Р Т Ф Ц Ш Ь Я
т.е. через один символ
 
V

Vovochka

Код:
vovochka@vocomp:~> cat test.pl																																											 
#!/usr/bin/perl																																															 

use strict;
use utf8; 

my $alphabet = "АБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ";
for (my $i=0;$i<32;$i++)						 
{												 
print substr($alphabet,$i,1)." ";			 
}vovochka@vocomp:~> perl test.pl				 
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.		
Wide character in print at test.pl line 9.
Wide character in print at test.pl line 9.
Wide character in print at test.pl line 9.
Wide character in print at test.pl line 9.
Wide character in print at test.pl line 9.
Wide character in print at test.pl line 9.
Wide character in print at test.pl line 9.
Wide character in print at test.pl line 9.
Wide character in print at test.pl line 9.
Wide character in print at test.pl line 9.
Wide character in print at test.pl line 9.
Wide character in print at test.pl line 9.
А Б В Г Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ю Я
Ну извините что привожу нерабочий код. Я просто никогда не проверяю то, что пишу.

А вообще конечно интересно как вы добились такого результата? Ваша ОСь - винда?
 
A

amorphius

проблема частично решена, выводит теперь весь алфавит. но появилась другая, также я полагаю связана с юникодом.
у меня стоит прагма
Код:
use utf8;
наполнение для сайта берется из базы, в базе все кодировки установлены на юникод, после соединения с базой сразу выполняю
Код:
set names utf8
в странице указано charset=UTF-8, тем не менее база возвращает данные в иероглифах. Как мне прочесть еще в нормальном виде данные из базы?
 
V

Vovochka

Ничем не могу помочь. Эксперементируйте :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!