Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировать в "JavaScript Unicode string", типа json, только пуще 
V
    Опции темы
GZep
Дата 20.7.2010, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



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

Нашел вот такой сервис:
http://www.auditmypc.com/html-encoder.asp
И вот, что он делает:

есть текст:
Код

1234 бла бла la la†®

преобразуем через сервис, получаем:
Код

\u0031\u0032\u0033\u0034\u0020\u0431\u043B\u0430\u0020\u0431\u043B\u0430\u0020\u006C\u0061\u0020\u006C\u0061\u2020\u00AE

Работает там flash файлик, а распотрашить swf нет возможности smile 

Ближайший аналог который нашел на PHP - json_encode()
Код

echo json_encode("1234 бла бла la la†®", JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP);

получаем:
Код

1234 \u0431\u043b\u0430 \u0431\u043b\u0430 la la\u2020\u00ae

То есть json_encode преобразовал не все символы, то есть для данной задачи нужно что-то другое. Буду рад любой помощи! smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
skyboy
Дата 20.7.2010, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Код

function test($matches) {
// надо вернуть код символа, хранящегося в $matches[0]
// спереди прицепить строку "\u"
// сходу не вспомнил, какой функцией это сделать
}
$str = '1234 бла бла la la†®';
$str = preg_replace_callback('#.#u', 'test', $str);

PM MAIL   Вверх
GZep
Дата 21.7.2010, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Вот накатал немного:
Код

$text = "1234 бла бла la la†®";

echo "Количество символов в строке: " . strlen($text) . "<br />\n";//29
$utf16 = mb_convert_encoding($text, 'UTF-16', 'UTF-8');
$arr = str_split($utf16);
$out = "";
echo "Количество элементов массива после str_split: " . count($arr) . "<br />\n";//40 (!!!!!) сорок!!!1111адинадин

/**
 * Цикл нестандартный:
 * $i не 0, а 1
 * шаг не 1, а 2
 */
for ($i = 1, $n = count($arr); $i < $n; $i += 2) {

    $out .= sprintf('\u%04s', bin2hex($arr[$i]));

}

echo $out;//\u0031\u0032\u0033\u0034\u0020\u0031\u003b\u0030\u0020\u0031\u003b\u0030\u0020\u006c\u0061\u0020\u006c\u0061\u0020\u00ae


Результат подходящий, но метод... итого на данный момент:
  • работаем проходя циклом по каждому символу... не айс : (
  • не то, что проходя по каждому, а даже через одного - щаг цикла - 2
  • спасибо str_split за некорректную работу

Выжал из своего мозга все соки, вырубаюсь, иду спать)) быть может, кто-нибудь доработает smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
ksnk
Дата 21.7.2010, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
GZep
Дата 21.7.2010, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Цитата(ksnk @  21.7.2010,  01:04 Найти цитируемый пост)
не оно? 

кажись, оно!
вывод:
Код

%u0031%u0032%u0033%u0034%u0020%u0431%u043b%u0430%u0020%u0431%u043b%u0430%u0020%u006c%u0061%u0020%u006c%u0061%u2020%u00ae

сейчас только подкорректирую smile

Добавлено @ 11:40
Итак, благодаря уважаемому ksnk (+), появился второй вариант:
Код

function js_urlencode($str) {

    $str = mb_convert_encoding($str, "UTF-16", "UTF-8");
    $buf = "";

    for ($i = 0, $n = mb_strlen($str, "UTF-16"); $i < $n; $i++) {

        $buf .= "\u" . bin2hex(mb_substr($str, $i, 1, "UTF-16"));

    }

    return $buf;

}

echo js_urlencode("1234 бла бла la la†®");//\u0031\u0032\u0033\u0034\u0020\u0431\u043b\u0430\u0020\u0431\u043b\u0430\u0020\u006c\u0061\u0020\u006c\u0061\u2020\u00ae 

Результат впринципе совпадает с моим "наклёпанным" и "костыльным", да и принцип действия похожий, но этот, вроде, чище и, наверное, побыстрее будет. smile 

Это сообщение отредактировал(а) GZep - 21.7.2010, 11:41


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.