Не работает преобразование кода из одной системы счисления в ID в другой системе счис

U
На сайте с 31.01.2011
Offline
23
664

Здравствуйте!

Имеется вот такой код:

<?php

if(isset($_GET['link'])) {
$link = ($_GET['link']);

$link = strtolower($link);
$link = strip_tags($link);
$link = htmlspecialchars($link);
$link = trim($link);

$array = Array('1'=>0, '2'=>1, '3'=>2, '4'=>3, '5'=>4, '6'=>5,
'7'=>6, '8'=>7, '9'=>8, 'б'=>9, 'в'=>10, 'г'=>11,
'д'=>12, 'ж'=>13, 'з'=>14, 'к'=>15, 'л'=>16, 'м'=>17,
'н'=>18, 'п'=>19, 'р'=>20, 'с'=>21, 'т'=>22, 'ф'=>23,
'х'=>24, 'ц'=>25, 'ч'=>26, 'ш'=>27, 'щ'=>28);
$id = 0;

for ($i=0; $i<strlen($link); $i++) {
$id+=$array[$link[(strlen($link)-$i-1)]]*pow(29,$i);
}
echo $id;
}
else {
echo "Не был передан короткий код.";
}
?>

Что он делает?

На вход методом GET подается короткий код, состоящий из кириллицы (только согласные буквы) и цифр и обрабатывается спецфункциями (перевод в нижний регистр, вырезание пробелов и т.д.). На выходе должно произойти преобразование этого кода из 29-ой системы счисления в 10-ый ID. Проблема в том, что этот код работает корректно только с цифрами (например, принимает 1, выдается - 0). Буквы кириллического алфавита он обрабатывает неверно и выдает "0".

Помогите пожалуйста решить проблему...

То, что мы знаем - ограничено, А то, чего мы не знаем - бесконечно...
siv1987
На сайте с 02.04.2009
Offline
427
#1

Проверьте кодировку входящих данных, и кодировку ключей массива

U
На сайте с 31.01.2011
Offline
23
#2

На входе:

Если только цифры - ASCII. Если буквы/буквы и цифры - UTF-8.

А как проверить кодировку ключей массива?

freezebreeze
На сайте с 31.10.2013
Offline
9
#3
Ultran:
На входе:
Если только цифры - ASCII. Если буквы/буквы и цифры - UTF-8.
А как проверить кодировку ключей массива?

это кодировка редактора, в котором пишете код.

Верить никому нельзя. Мне — можно.
U
На сайте с 31.01.2011
Offline
23
#4

Кодировка, редактора, в котором пишу код - UTF-8 (без BOM).

freezebreeze
На сайте с 31.10.2013
Offline
9
#5
***93

а это что вообще?

U
На сайте с 31.01.2011
Offline
23
#6
freezebreeze:
а это что вообще?

Это угловая квадратная скобка. Просто здесь она почему-то отображается в виде кода символа. Должно быть вот так - ]

А ***91; - это соответственно - [

freezebreeze
На сайте с 31.10.2013
Offline
9
#7

Если до завтра никто не разберётся - помогу, я спать пошёл

D
На сайте с 06.10.2013
Offline
1
#8

UTF же.

Переводите строку в массив и дальше работайте как с массивом.

http://us1.php.net/manual/en/function.str-split.php#107658

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий