Squeak.ru - шаблоны программирования

Проблема с кодировкой испанской строки

Мне нужна помощь в изменении кодировки строки, скопированной и вставленной из буфера обмена...

Любопытная строка "español":

$problematicString = "español"; //copied and pasted from a filename
$okString          = "español"; //typed

echo md5($problematicString)."<br>";
echo md5($okString)."<br>";

Это результат:

c9ae1d88242473e112ede8df2bdd6802
5d971adb0ba260af6a126a2ade4dd133

Почему выходные данные md5() различаются для одних и тех же строк?

Я попытался изменить обе строки, используя: mb_convert_encoding($string, "ISO-8859-1", "UTF-8"), но результат все равно другой.

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

23.07.2017

  • К вашему сведению, это называется кодированием, а не кодификацией;) 24.07.2017

Ответы:


1

Почему md5 разные для одних и тех же строк?

Это не одна и та же строка. В первом случае тильда стоит на «о»:

$problematicString = "español"

Во втором случае тильда стоит на «n»:

$okString = "español";

Вот почему хэши не совпадают.

23.07.2017
  • На самом деле я вижу, что обе строки равны испанскому языку, используя Google Chrome 59. 25.07.2017

  • 2

    Причина в том, что первая часть содержит скрытый юникод:

    &#771;

    Вытащено из моего редактора:

    $problematicString = "espan&#771;ol"; что он на самом деле показывает.

    На самом деле это тильда ~.

    Эти символы, которые являются большинством символов, отличных от ASCII, используемых для стандартной фонетической транскрипции английского языка, взяты из нескольких областей таблицы Unicode: из дополнения Latin-1, расширенного латинского A и B, расширений IPA, комбинирования Диакритический знак и греческий (тета). Все эти страницы поддерживаются шрифтом lucida sans unicode, шрифтом TrueType, который Microsoft поставляет вместе с последними продуктами. К сожалению, Cyberbit, родоначальник TTF от Bitstream, не поддерживает расширения IPA. Эти значения можно вводить вручную как символы или назначать горячим клавишам, кнопкам или чему-то еще, что позволяет браузер. Word97 может получить доступ к шрифту через таблицу символов в разделе «Вставка».

    Еще один способ написать этот шрифт — использовать Wincalis uniedit, который записывает значения Unicode непосредственно в файл. Затем «Это фонетически расшифровано» представлено странным супом из алфавита, который браузер преобразует в [ðɪs ɪz fɘnɛɾɘkli trænskraibd] (посмотрите на это в текстовом редакторе, чтобы увидеть суп). Для любой серьезной или обширной работы с транскрипцией пригодится такой редактор, как Wincalis — вы даже можете настроить прилагаемую клавиатуру IPA.

    Если вы хотите, чтобы файл инициировал декодирование Unicode UTF-8 в браузере, вы должны указать этот META-тег:

    со следующим в разделе "Диакритика":

    ̃ #771 nasalized

    23.07.2017

    3

    Как сказал @BeetleJuice, это не одна и та же строка. Вот еще один способ понять это: сократите данные до этих двух строк:

    "español";
    "español";
    

    Затем запустите против них команду od. Обратите внимание, что шестнадцатеричные символы отличаются:

    0000000      6522    7073    6e61    83cc    6c6f    3b22    220a    7365
               "   e   s   p   a   n    ̃  **   o   l   "   ;  \n   "   e   s
    0000020      6170    b1c3    6c6f    3b22    0a20
               p   a   ñ  **   o   l   "   ;      \n
    0000032
    
    23.07.2017

    4

    В первой строке на самом деле представляет собой n и комбинированную диакритическую тильду (http://www.fileformat.info/info/unicode/char/0303/index.htm). Во второй строке это ñ(http://www.fileformat.info/info/unicode/char/f1/index.htm), один символ. Вы можете видеть это, если вы используете backspace для удаления символов, и вы увидите, что в первом случае требуется 2 нажатия, одно для удаления тильды, другое для «n».

    23.07.2017
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...