31

Re: kodik

dvdsoft6 пишет:

А если к примеру отсутствует постер,можно вывести сообщение о его отсутствии?
Или заменить на свою ссылку с картинкой.

Можно вот так

+ открыть спойлер
if ($img){
// пример ссылка на картинку
echo '<img src="'.$img.'" alt="">';
echo "Есть картинка";
} else {
echo '<img src="ссылка на картинку пустышку" alt="">';
echo "Нет картинки";}
Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: dvdsoft61

32

Re: kodik

Ребят, а никто не знает, что с kodik случилось? Подчистили базу или есть нюансы?
Такое ощущение, что из базы ушли фильмы, которые там были.

Например, даже из этой темы: https://hms.lostcut.net/viewtopic.php?pid=14882#p14882
Мстители: Финал, имевший ссылку //kodik.info/video/35696/56d36a6f112341865f7c5baf85bf23e7/720p не доступен.

И раньше я экспериментировал с фильмом "Человек-паук: Через вселенные (2018)" со ссылкой //kodik.info/video/33412/3e95a7ec4a37d58159834de5f8f18217/720p тоже того.

Да и Кинопоиск-ID тоже их не находит: https://kodikapi.com/search?token=b7cc4 … _id=843650, https://kodikapi.com/search?token=b7cc4 … _id=920265
Пробовал с разными токенами. Нуль.
Да и вообще база как-будто меньше стала. В основном, Азия.

Sony Bravia KDL-32CX523

33

Re: kodik

WendyH пишет:

В основном, Азия.

Так и есть, Европу, США и Россию они сказали всю удалят. С новыми фильмами и сериалами замена есть, даже не одна, а вот старые архивы были уникальны.

34

Re: kodik

WendyH пишет:

Да и вообще база как-будто меньше стала. В основном, Азия.

Вот, что было у них в новостях.

+ открыть спойлер

UPD (22.10.2019) В связи со сложностью ситуации мы приостанавливаем работу плееров по европейским, российским и американским фильмам и сериалам. Подобный контент больше не будет добавляться, а весь старый контент в скором времени будет скрыт. База продолжить функционировать в стандартном режиме для дорам и другого азиатского/турецкого контента. Извиняемся за сложившуюся ситуацию.
Извиняемся за доставленные неудобства

Отладка кода — это как охота. Только охота, на баги.

35

Re: kodik

Spell пишет:

;D  Можно!  Написал в личку.

Добрый день. Можно и мне в личку?)

36 (2020.05.26 11:37:45 отредактировано WendyH)

Re: kodik

Пример получения ссылки на PHP:

<?php

// В параметрах указываем url как http://kodik.cc/video/55568/f07cf23d77f8e4bb4865efa1a0f2079a/720p
$url = isset($_GET["url"]) ? $_GET["url"] : ""; if (!$url) die("No url!");

// Устанавливаем HTTP-заголовки, притворяясь браузером
$headers = "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n" .
           "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36\r\n";

$options = ['http'=>['header'=>$headers."Referer: $url\r\n"]];

// Загружаем страницу
$html = file_get_contents($url, false, stream_context_create($options));

// В HTML-коде находим значение ссылки на iframe
$iframe_url = preg_match('/iframe.src\s*=\s*"(.*?)"/', $html, $m) ? "http:".$m[1] : "";
// Если не нашли - умирая, сообщаем об этом
if (!$iframe_url) die("Error! No found iframe.src in loaded page.");

// Устанавливаем новое значение Referer в HTTP-заголовках
$options['http']['header'] .= "Referer: $iframe_url\r\n";
// Скачиваем страницу по ссылке на iframe
$html = file_get_contents($iframe_url, false, stream_context_create($options));

// Ищем hash2. Он в js-файле, ищем ссылку на этот файл, грузим и ищем там значение hash2
$jsUrl = preg_match('#(/assets/js/app.promo[^"\']+)#', $html, $m) ? "http://kodik.cc".$m[1] : "";
// Если не нашли ссылку на js-файл app.promo - сообщаем и завершаем скрипт
if (!$jsUrl) die("Error! Not found js file (for hash2).");
// Загружаем по найденной ссылке весь js-код
$jsData = file_get_contents($jsUrl, false, stream_context_create($options));
// Ищем значение hash2 и ссылки на post
$hash2  = preg_match('/hash2:"(.*?)"/' , $jsData, $m) ? $m[1] : "";
$post_url  = preg_match('#url:"(.*?)",#' , $jsData, $m) ? $m[1] : "";
// Если не нашли - всё напрасно
if (!$hash2) die("Error! Not found hash2 value in js file.");

// Формируем данные для POST запроса, находя нужные значения в html-коде загруженной страницы
$postData = array();
$postData['d'       ] = preg_match('/var domain\s*=\s*"(.*?)"/'     , $html, $m) ? $m[1] : "";
$postData['d_sign'  ] = preg_match('/var d_sign\s*=\s*"(.*?)"/'     , $html, $m) ? $m[1] : "";
$postData['pd'      ] = preg_match('/var pd\s*=\s*"(.*?)"/'         , $html, $m) ? $m[1] : "";
$postData['pd_sign' ] = preg_match('/var pd_sign\s*=\s*"(.*?)"/'    , $html, $m) ? $m[1] : "";
$postData['ref'     ] = preg_match('/var ref\s*=\s*"(.*?)"/'        , $html, $m) ? $m[1] : "";
$postData['ref_sign'] = preg_match('/var ref_sign\s*=\s*"(.*?)"/'   , $html, $m) ? $m[1] : "";
$postData['type'    ] = preg_match('/videoInfo.type\s*=\s*["\'](.*?)["\']/', $html, $m) ? $m[1] : "";
$postData['hash'    ] = preg_match('/videoInfo.hash\s*=\s*["\'](.*?)["\']/', $html, $m) ? $m[1] : "";
$postData['id'      ] = preg_match('/videoInfo.id\\s*=\\s*["\'](.*?)["\']/', $html, $m) ? $m[1] : "";
$postData['hash2'   ] = $hash2;
// Подготавливаем POST-запрос
$options  = ['http'=>['method'=>"POST",'header'=>$headers."Referer: $iframe_url\r\n",'content'=> http_build_query($postData)]];
// Делаем POST запрос с подготовленными данными
$data = file_get_contents("http://kodik.cc.$post_url", false, stream_context_create($options));
// Преобразуем ответ в JSON-объект
$json = json_decode($data);

// Перебираем все полученные ссылки и запоминаем последнюю (с наивысшим качеством)
$link = "";
foreach($json->links as $key => $arrayLinks) {
    $link = "http:".$arrayLinks[0]->src;
}

// Выводим полученную ссылку на поток
echo $link;

Тест: http://wonky.lostcut.net/kodik.php?url= … 2079a/720p

Sony Bravia KDL-32CX523
Спасибо сказали: smsbox3, foks5050, Dimon1978pl3

37

Re: kodik

WendyH пишет:

Пример получения ссылки на PHP:

Благодарочка

38

Re: kodik

На кодике есть вот такие ссылки

http://aniqit.com/uv/163165/cb83e2d85b72a1940950/720p

это серия из сериала

http://kodik.cc/serial/27050/d4fa59e4fbbae0660777d2c0568769a6/720p


Пока, что ищу через называние, но это не очень то и надежно, в самом uv файле нет называния,  а есть

 var type = "uv";
    var videoId = "163165";
    var autoResume = false;

, а название на странице "Ближе к тебе | Моя колючая девушка"  если целиком вводить не совсем правильно находит, слишком много..
В файле сериала название есть 

<title>Ближе к тебе</title> 

и так же код сериала

<script>
    var serialId = Number(27050);
    var playerDomain = "kodik.cc";
    var autoResume = false;
    var saveChosenEpisode = false;
  </script>

Если ли какой другой способ, кроме поиска по называнию?

39

Re: kodik

smsbox3 пишет:

Если ли какой другой способ, кроме поиска по называнию?

по kinopoisk_id например token=здесь токен&kinopoisk_id=464963

Отладка кода — это как охота. Только охота, на баги.

40

Re: kodik

Spell пишет:

по kinopoisk_id например token=здесь токен&kinopoisk_id=464963

Спасибо, но в в ссылке

http://aniqit.com/uv/163165/cb83e2d85b72a1940950/720p

нет такого ключа и не вижу способа его получить.

41 (2020.11.03 02:10:12 отредактировано Mr.Max)

Re: kodik

WendyH пишет:

Пример получения ссылки на PHP:

Изменили кое что . В коде нужно заменить

http://kodik.cc/get-vid на https://aniqit.com/video-information . Оставлю тут . Может кому пригодится .

Спасибо сказали: smsbox3, Dimon1978pl2

42

Re: kodik

Mr.Max пишет:

http://kodik.cc/get-vid на https://aniqit.com/video-information . Оставлю тут . Может кому пригодится .

Опять изменили на https://kodik.cc/get-video-info

Спасибо сказали: smsbox31

43 (2021.02.08 16:39:10 отредактировано smsbox3)

Re: kodik

Что-то у меня перестало работать с того места, где запрос идет на http://kodik.cc/get-video-info Вместо json выдает сообщение

An unhandled lowlevel error occurred. The application logs may have details.

Параметры вроде бы все собрались

p.s. фильмы играет, а вот на серии сериала получаю ошибку.

44

Re: kodik

smsbox3 пишет:

Что-то у меня перестало работать с того места, где запрос идет на http://kodik.cc/get-video-info Вместо json выдает сообщение

An unhandled lowlevel error occurred. The application logs may have details.

Параметры вроде бы все собрались

p.s. фильмы играет, а вот на серии сериала получаю ошибку.

А ссылку сюда киньте,ту где у Вас ошибку выдает.

Отладка кода — это как охота. Только охота, на баги.

45

Re: kodik

Spell пишет:

А ссылку сюда киньте,ту где у Вас ошибку выдает.

У меня на всех сериалах, например

http://kodik.cc/serial/22784/f727369b6bd4841f4b6e561e533e5c29/720p

46

Re: kodik

Что то поменяли . Не работает

47

Re: kodik

WendyH пишет:

Пример получения ссылки на PHP:

<?php

// В параметрах указываем url как http://kodik.cc/video/55568/f07cf23d77f8e4bb4865efa1a0f2079a/720p
$url = isset($_GET["url"]) ? $_GET["url"] : ""; if (!$url) die("No url!");

// Устанавливаем HTTP-заголовки, притворяясь браузером
$headers = "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n" .
           "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36\r\n";

$options = ['http'=>['header'=>$headers."Referer: $url\r\n"]];

// Загружаем страницу
$html = file_get_contents($url, false, stream_context_create($options));

// В HTML-коде находим значение ссылки на iframe
$iframe_url = preg_match('/iframe.src\s*=\s*"(.*?)"/', $html, $m) ? "http:".$m[1] : "";
// Если не нашли - умирая, сообщаем об этом
if (!$iframe_url) die("Error! No found iframe.src in loaded page.");

// Устанавливаем новое значение Referer в HTTP-заголовках
$options['http']['header'] .= "Referer: $iframe_url\r\n";
// Скачиваем страницу по ссылке на iframe
$html = file_get_contents($iframe_url, false, stream_context_create($options));

// Ищем hash2. Он в js-файле, ищем ссылку на этот файл, грузим и ищем там значение hash2
$jsUrl = preg_match('#(/assets/js/app.promo[^"\']+)#', $html, $m) ? "http://kodik.cc".$m[1] : "";
// Если не нашли ссылку на js-файл app.promo - сообщаем и завершаем скрипт
if (!$jsUrl) die("Error! Not found js file (for hash2).");
// Загружаем по найденной ссылке весь js-код
$jsData = file_get_contents($jsUrl, false, stream_context_create($options));
// Ищем значение hash2 и ссылки на post
$hash2  = preg_match('/hash2:"(.*?)"/' , $jsData, $m) ? $m[1] : "";
$post_url  = preg_match('#url:"(.*?)",#' , $jsData, $m) ? $m[1] : "";
// Если не нашли - всё напрасно
if (!$hash2) die("Error! Not found hash2 value in js file.");

// Формируем данные для POST запроса, находя нужные значения в html-коде загруженной страницы
$postData = array();
$postData['d'       ] = preg_match('/var domain\s*=\s*"(.*?)"/'     , $html, $m) ? $m[1] : "";
$postData['d_sign'  ] = preg_match('/var d_sign\s*=\s*"(.*?)"/'     , $html, $m) ? $m[1] : "";
$postData['pd'      ] = preg_match('/var pd\s*=\s*"(.*?)"/'         , $html, $m) ? $m[1] : "";
$postData['pd_sign' ] = preg_match('/var pd_sign\s*=\s*"(.*?)"/'    , $html, $m) ? $m[1] : "";
$postData['ref'     ] = preg_match('/var ref\s*=\s*"(.*?)"/'        , $html, $m) ? $m[1] : "";
$postData['ref_sign'] = preg_match('/var ref_sign\s*=\s*"(.*?)"/'   , $html, $m) ? $m[1] : "";
$postData['type'    ] = preg_match('/videoInfo.type\s*=\s*["\'](.*?)["\']/', $html, $m) ? $m[1] : "";
$postData['hash'    ] = preg_match('/videoInfo.hash\s*=\s*["\'](.*?)["\']/', $html, $m) ? $m[1] : "";
$postData['id'      ] = preg_match('/videoInfo.id\\s*=\\s*["\'](.*?)["\']/', $html, $m) ? $m[1] : "";
$postData['hash2'   ] = $hash2;
// Подготавливаем POST-запрос
$options  = ['http'=>['method'=>"POST",'header'=>$headers."Referer: $iframe_url\r\n",'content'=> http_build_query($postData)]];
// Делаем POST запрос с подготовленными данными
$data = file_get_contents("http://kodik.cc.$post_url", false, stream_context_create($options));
// Преобразуем ответ в JSON-объект
$json = json_decode($data);

// Перебираем все полученные ссылки и запоминаем последнюю (с наивысшим качеством)
$link = "";
foreach($json->links as $key => $arrayLinks) {
    $link = "http:".$arrayLinks[0]->src;
}

// Выводим полученную ссылку на поток
echo $link;

Тест: http://wonky.lostcut.net/kodik.php?url= … 2079a/720p

Не подскажете что сменили ?

48

Re: kodik

hash2 нет, в скаченном плеере

49

Re: kodik

smsbox3 пишет:

hash2 нет, в скаченном плеере

Он вообще используется ? Или засунули куда-то

50

Re: kodik

Mr.Max пишет:

Не подскажете что сменили ?

вот такие данные на  POST запрос
Ссылка: h_s://kodik.cc/gvi
POST

+ открыть спойлер
d= bd.kodik.biz
d_sign= 9d75e68ee517a33118a62b807f067680028d852a9d047fcf750ca71c3e139cbf
pd=kodik.cc
pd_sign= 9945930febce35101e96ce0fe360f9729430271c19941e63c5208c2f342e10ed
ref= https%3A%2F%2Fbd.kodik.biz%2F
ref_sign= 4f2e5d1ecae8fec4d922c34b75d1cc3d21c74852383f1e32311c6d8645c650aa
bad_user= true
type= video
hash=6bf175a0d92b893b3278b523b390dc85
id= 77318
info= %7B%7D  //скобки {}

Получаем json и смотрим,что кодики тоже ссылки начали шифровать,но не сильно  :)

+ открыть спойлер
{"advert_script":"","domain":"bd.kodik.biz","default":360,
"links":
{"360":[
{"src":"4U3Mt5CdzVmZp5WYtpzcshmO0AXbuAjNz8iNwYjM4ATMyAjM6QjN5ETNlFmZ0kDNhBTZkFDMxETOzkjYhBzN1QWO4EWYvUzMmZWOiFTM5EDNk1COkZDOtIjN5QTLkdTN20CM4gTNlZTY38yckF2bsBXdyV2c19SbvNmLldWYy9Gdz1yapR2br5CZ19Gbj9yL",
"type":"application/x-mpegURL"}],
"480":[
{"src":"4U3Mt5CdzVmZp5WYtpzcshmO0AXbuADO08iNwYjM4ATMyAjM6QjN5ETNlFmZ0kDNhBTZkFDMxETOzkjYhBzN1QWO4EWYvUzMmZWOiFTM5EDNk1COkZDOtIjN5QTLkdTN20CM4gTNlZTY38yckF2bsBXdyV2c19SbvNmLldWYy9Gdz1yapR2br5CZ19Gbj9yL",
"type":"application/x-mpegURL"}],
"720":[
{"src":"4U3Mt5CdzVmZp5WYtpzcshmO0AXbuAjM38iNwYjM4ATMyAjM6QjN5ETNlFmZ0kDNhBTZkFDMxETOzkjYhBzN1QWO4EWYvUzMmZWOiFTM5EDNk1COkZDOtIjN5QTLkdTN20CM4gTNlZTY38yckF2bsBXdyV2c19SbvNmLldWYy9Gdz1yapR2br5CZ19Gbj9yL",
"type":"application/x-mpegURL"}]},"ip":""}
Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: smsbox31

51

Re: kodik

Spell пишет:

вот такие данные на  POST запрос
Ссылка: h_s://kodik.cc/gvi
POST

+ открыть спойлер
d= bd.kodik.biz
d_sign= 9d75e68ee517a33118a62b807f067680028d852a9d047fcf750ca71c3e139cbf
pd=kodik.cc
pd_sign= 9945930febce35101e96ce0fe360f9729430271c19941e63c5208c2f342e10ed
ref= https%3A%2F%2Fbd.kodik.biz%2F
ref_sign= 4f2e5d1ecae8fec4d922c34b75d1cc3d21c74852383f1e32311c6d8645c650aa
bad_user= true
type= video
hash=6bf175a0d92b893b3278b523b390dc85
id= 77318
info= %7B%7D  //скобки {}

Получаем json и смотрим,что кодики тоже ссылки начали шифровать,но не сильно  :)

+ открыть спойлер
{"advert_script":"","domain":"bd.kodik.biz","default":360,
"links":
{"360":[
{"src":"4U3Mt5CdzVmZp5WYtpzcshmO0AXbuAjNz8iNwYjM4ATMyAjM6QjN5ETNlFmZ0kDNhBTZkFDMxETOzkjYhBzN1QWO4EWYvUzMmZWOiFTM5EDNk1COkZDOtIjN5QTLkdTN20CM4gTNlZTY38yckF2bsBXdyV2c19SbvNmLldWYy9Gdz1yapR2br5CZ19Gbj9yL",
"type":"application/x-mpegURL"}],
"480":[
{"src":"4U3Mt5CdzVmZp5WYtpzcshmO0AXbuADO08iNwYjM4ATMyAjM6QjN5ETNlFmZ0kDNhBTZkFDMxETOzkjYhBzN1QWO4EWYvUzMmZWOiFTM5EDNk1COkZDOtIjN5QTLkdTN20CM4gTNlZTY38yckF2bsBXdyV2c19SbvNmLldWYy9Gdz1yapR2br5CZ19Gbj9yL",
"type":"application/x-mpegURL"}],
"720":[
{"src":"4U3Mt5CdzVmZp5WYtpzcshmO0AXbuAjM38iNwYjM4ATMyAjM6QjN5ETNlFmZ0kDNhBTZkFDMxETOzkjYhBzN1QWO4EWYvUzMmZWOiFTM5EDNk1COkZDOtIjN5QTLkdTN20CM4gTNlZTY38yckF2bsBXdyV2c19SbvNmLldWYy9Gdz1yapR2br5CZ19Gbj9yL",
"type":"application/x-mpegURL"}]},"ip":""}

BASE64 + мусор я так понимаю

Спасибо сказали: Dimon1978pl1

52

Re: kodik

Mr.Max пишет:

BASE64 + мусор я так понимаю

мусора нет. Строка зашифрована в base64, и перевернута.

Отладка кода — это как охота. Только охота, на баги.

53 (2021.08.26 19:50:49 отредактировано Mr.Max)

Re: kodik

Spell пишет:

мусора нет. Строка зашифрована в base64, и перевернута.

есть идеи как перевернуть обратно ? Все понял. Сейчас переверну. Спасибо огромное!

54

Re: kodik

Mr.Max пишет:

есть идеи как перевернуть обратно ?

Здесь описал как:

+ открыть спойлер

php функция strrev()  и потом base64_decode();

Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: Dimon1978pl1

55

Re: kodik

Уже перевернул. Просто изначально не понял что там перевернуто . Благодарю.

Спасибо сказали: smsbox31

56

Re: kodik

перестало расшифровывать

57 (2023.04.06 08:16:27 отредактировано smsbox3)

Re: kodik

Раньше было base64 , а теперь либо мусора добавили, либо как-то по другому ссылки закодировали и они вот так теперь закодированы

{"240":[{"src":"nUE0pUZ6Yl9woT91MP5eo2Ecnl1wMT4hL29gY21iqzyypl9xLwMzZwx3ZzZ4AQV1ZwH1BGp3MGZ1ZwAxZQLkZ2DjA2DjLGLlBGyxY2H5Lmt2MGN3MwZkZQL3AzR5MQD4ZmqvAJEyZmMzBQt0BwVjZwZjAQN2ZGLiZwDjYz1jAQcboUZ6oJShnJMyp3DhoGA1BN","type":"application/x-mpegURL"}],"360":

после поворота

NB1AGohD3pyMJnhSJo6ZUobcQAj1zYjDwZiLGZ2NQAjZwZjVwB0tQBzMmZyEJAvqmZ4DQM5RzA3LQZkZwM3NGM2tmL5H2YxyGBlLGLjD2AjD2ZkLQZxAwZ1ZGM3pGB1HwZ1VQA4ZzZ3xwZzMwLx9lpyyzqi12Yg92Lh4TMw1lncE2oe5PM19Tow9lY6ZUp0EUn

и закодировано тут что-то такого вида

https://cloud.kodik-cdn.com/movies/db6f2972c8425255977e3523d0613d07d0a6299d/e9c86e07f310676a9d4837b5de36f884:2023040616/360.mp4:hls:manifest.m3u8

Осталось угадать ,что это? А сериалы проигрывает. Там пока ничего не меняли.


Вообще-то если одну ссылку сравнивать то, в закодированном виде она

nUE0pUZ6Yl9woT91MP5eo2Ecnl1wMT4hL29gY21iqzyypl9xLwMzZwx3ZzZ4AQV1ZwH1BGp3MGZ1ZwAxZQLkZ2DjA2DjLGLlBGyxY2H5Lmt2MGN3MwZkZQL3AzR5MQD4ZmqvAJEyZmMzBQt0BwVjZwZjAQN2ZGLiZmLjYz1jAQcboUZ6oJShnJMyp3DhoGA1BN

а в base64 она же

aHR0cHM6Ly9jbG91ZC5rb2Rpay1jZG4uY29tL21vdmllcy9kYjZmMjk3MmM4NDI1MjU1OTc3ZTM1MjNkMDYxM2QwN2QwYTYyOTlkL2U5Yzg2ZTA3ZjMxMDY3NmE5ZDQ4MzdiNWRlMzZmODg0OjIwMjMwNDA2MTYvMzYwLm1wNDpobHM6bWFuaWZlc3QubTN1OA==

Цифры неизменны и на месте, а вот буквы заменены
a на n H на U R на E итд Думаю можно просто таблицу замены сделать и должна получить правильная кодировка в base64, после чего декодировать. Как говорили в известном фильме "Пришить бы вас, да возиться некогда.. "

58 (2023.04.06 22:53:47 отредактировано smsbox3)

Re: kodik

Короче там так

ABCDEFGHIJKLMNOPQRSTUVWXYZ

меняется на

NOPQRSTUVWXYZABCDEFGHIJKLM

точно так же для маленьких букв.

abcdefghijklmnopqrstuvwxyz

меняется на

nopqrstuvwxyzabcdefghijklm

Сдвиг по алфавиту на 13

Строку перед отправкой на base64decode можно обработать по таблице замены и после этого делать base64decode , хотя вместо таблицы замены, вероятно, проще какую-то функцию использовать.

59

Re: kodik

спасибо,
работает без переворота

60 (2023.04.06 22:51:52 отредактировано smsbox3)

Re: kodik

Да вместо переворота  strrev( я использую такую функцию convert(

function convert($input)
{ $char_array = preg_split('/(?<!^)(?!$)/u', $input);
$a='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$b='NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm0123456789';
$output="";foreach($char_array as   &$value) {
$pos1 = strpos($a, $value); $output=$output.$b[$pos1];
}
return $output;
}