Как изменить диакритические символы на недиакритические [дубликат]

1) Создайте сертификат SSL для localhost

Чтобы использовать HTTPS с localhost, нам фактически нужны два сертификата: корневой сертификат и сертификат домена специально созданный для домена localhost.

Эти изящные сценарии , которые я нашел, заботятся о создании обоих. Они очень просты в использовании - просто внимательно следуйте инструкциям, и все будет хорошо. Единственное, что не так ясно в документации, это то, что там, где написано Then mark the certificate as trusted, это означает, что вы должны щелкнуть по сертификату в Keychain Access и изменить опцию Trust на Always.

( Здесь вы можете найти более подробное объяснение того, что на самом деле делают эти сценарии)

Если все работало для вас, у вас теперь должно быть два файла server.crt и server.key. Я создал папку ssl в /Applications/MAMP и переместил в нее файлы; но вы можете разместить их там, где считаете нужным.

Давайте теперь забудем о файлах и перейдем к некоторой конфигурации Apache.

2) Настройте Apache MAMP на прием SSL

По умолчанию Apache не настроен на прием SSL-соединений, поэтому мы должны это изменить. Откройте /Applications/MAMP/conf/apache/httpd.conf и убедитесь, что следующие строки НЕ закомментированы. Если это так, удалите # в начале строки:

LoadModule ssl_module modules/mod_ssl.so 

Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf

Также найдите эту строку:

Servername  localhost:443

и убедитесь, что порт установлен на 443 443 - это порт по умолчанию для защищенных соединений HTTPS (обычные незащищенные HTTP-соединения по умолчанию прослушивают порт 80).

Далее откройте /Applications/MAMP/conf/apache/extra/httpd-ssl.conf и убедитесь, что у вас есть эта строка:

Listen 443

Опять же, это важно, потому что мы должны настроить все на одном и том же порту. Для этого вам также следует щелкнуть значок MAMP в док-станции вашего MAC, нажать Preferences, перейти на вкладку Ports и выбрать Set Web & MySql ports to 80 & 3306.

Остановите и перезапустите MAMP, чтобы применить сделанные нами изменения.

3) Сконфигурировать виртуальный хост по умолчанию для SSL

Находясь еще в /Applications/MAMP/conf/apache/httpd.conf, ищите эти строки:



#   General setup for the virtual host
DocumentRoot "/Applications/MAMP/Library/htdocs"
ServerName www.example.com:443

Эти строки задают поведение Apache по умолчанию для всех HTTPS-соединения. ServerName - это просто фиктивное имя, которое вы должны заменить на localhost; Вы также должны убедиться, что значение по умолчанию DocumentRoot соответствует корневой папке вашего проекта.

Поэтому измените приведенные выше строки следующим образом:



#   General setup for the virtual host
DocumentRoot "/path/to/your/htdocs" 
ServerName localhost

Если вы прокрутите немного дальше, пока мы все еще в директиве VirtualHost по умолчанию, вы найдете эти две строки :

SSLCertificateFile "/Applications/MAMP/conf/apache/server.crt"

SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server.key"

Измените их так, чтобы вы помещали файлы, которые мы сгенерировали на шаге 1. Как я уже говорил, я поместил мои в "/ Applications / MAMP / ssl", поэтому я изменил вышеуказанные строки:

SSLCertificateFile "/Applications/MAMP/ssl/server.crt"

SSLCertificateKeyFile "/Applications/MAMP/ssl/server.key"

Остановите и перезапустите MAMP, чтобы применить изменения. Теперь, если вы перейдете на https://localhost, вы сможете увидеть список проектов в вашей корневой папке. Вот и все для localhost!

4) Создайте сертификат SSL для пользовательских локальных доменов

Что делать, если вы хотите создать собственный домен myproject.dev и использовать SSL для этого тоже, так что вы может получить доступ к нему в https://myproject.dev?

Как и в случае с localhost, нам нужно создать сертификат SSL специально для домена myproject.dev, а затем настроить виртуальный хост для myproject.dev. Начнем с создания сертификата.

Опять же, я нашел этот маленький инструмент под названием create-ssl-certificate, который сгенерирует для вас сертификат SSL для определенного локального домена. Это тоже очень легко использовать, единственная не совсем понятная часть - это пакет NPM, который вы можете установить глобально с помощью npm -g install create-ssl-certificate.

Если все прошло хорошо с create-ssl-certificate, теперь у вас должно быть два файла, как это было с localhost на шаге 1. По умолчанию create-ssl-certificate вызывает сгенерированные файлы ssl.crt и [1142 ]. Я переименовал их в server.crt и server.key, чтобы соответствовать файлам localhost. Затем я создал папку ssl в корневой папке myproject и переместил туда файлы.

Давайте на минутку забудем о файлах и перейдем к некоторой конфигурации Apache.

4) Настройте Apache MAMP для приема виртуальных хостов

Если вы уже создавали виртуальные хосты, вы, вероятно, уже сделали это, поэтому вы можете пропустить этот шаг.

Единственное, что нам нужно сделать, чтобы «активировать» возможность создания виртуальных хостов, это перейти на /Applications/MAMP/conf/apache/httpd.conf и раскомментировать эту строку:

Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

5) Настроить Виртуальный хост вашего локального домена для SSL

Теперь мы можем настроить виртуальный хост, чтобы мы могли получить доступ к myproject в https://myproject.dev. Прежде всего, отредактируйте файл hosts и добавьте эту строку:

127.0.0.1   myproject.dev

Затем перейдите к /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf и добавьте следующее:


    ServerName myproject.dev
    DocumentRoot "/Users/myusername/Sites/myproject"
    SSLEngine on
    SSLCertificateFile "/Users/myusername/Sites/myproject/ssl/server.crt"
    SSLCertificateKeyFile "/Users/myusername/Sites/myproject/ssl/server.key"        

С этой конфигурацией вы будет иметь доступ к https://myproject.dev, потому что серверу дано указание искать SSL-сертификаты, которые мы создали на шаге 4.

13
задан Benjamin 2 February 2014 в 20:25
поделиться

4 ответа

Копирование от моего собственного ответа до другого вопроса:

Вместо того, чтобы составить Вашу собственную таблицу, Вы могли вместо этого преобразовать текст в D формы нормализации, где символы представлены как основной символ плюс диакритические знаки (например, "á" будет заменен сопровождаемым объединяющимся акутом). Можно затем разделить все, что не является буквой ASCII.

Таблицы все еще существуют, но являются теперь теми из стандарта Unicode.

Вы могли также попробовать NFKD вместо NFD, для ловли еще большего количества случаев.

Ссылки:

10
ответ дан 1 December 2019 в 18:06
поделиться

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

Если Вы планируете отобразить измененный текст, рассмотрите свою аудиторию. Что можно безопасно отфильтровать, далеко чувствительная локаль. На американском английском языке, "Иглу" = "иглу" и "резюме" = "резюме", но на турецком языке, нижний регистр я - ı (dotless), и на французском языке, cote кавычка средств, côté сторона средств, и côte означает побережье. Так, язык сопоставления определяет, какие различия являются существенными.

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

Общий, автоматизированный подход мог быть разработан с помощью разложения Unicode. С этим можно анализировать символ с диакритическими знаками к "объединяющимся" символам (диакритические знаки) и основной символ, с которым они объединены. Отфильтруйте любую вещь, которая является комбинированным символом, и у Вас должны быть "недиакритические".

Отсутствие дискриминации в автоматизированном методе, однако, могло иметь некоторые неожиданные эффекты. Я рекомендовал бы большое тестирование на представительном органе текста.

4
ответ дан 1 December 2019 в 18:06
поделиться

Для простого примера:

Удалить диакритические знаки из строки:

string newString = myDiacriticsString.Normalize(NormalizationForm.FormD);
2
ответ дан 1 December 2019 в 18:06
поделиться

Поскольку никто никогда не удосужился опубликовать код для этого, вот он:

    // \p{Mn} or \p{Non_Spacing_Mark}: 
    //   a character intended to be combined with another 
    //   character without taking up extra space 
    //   (e.g. accents, umlauts, etc.). 
    private readonly static Regex nonSpacingMarkRegex = 
        new Regex(@"\p{Mn}", RegexOptions.Compiled);

    public static string RemoveDiacritics(string text)
    {
        if (text == null)
            return string.Empty;

        var normalizedText = 
            text.Normalize(NormalizationForm.FormD);

        return nonSpacingMarkRegex.Replace(normalizedText, string.Empty);
    }

Примечание: основная причина, по которой это нужно, - это интеграция со сторонним поставщиком система, которая выполняет только ascii, но ваши данные находятся в юникоде. Это обычное дело. Ваши варианты в основном следующие: удалить символы с диакритическими знаками или попытаться удалить акценты с символов с диакритическими знаками, чтобы попытаться сохранить как можно больше исходного ввода. Очевидно, это не идеальное решение, но оно на 80% лучше, чем простое удаление любого символа выше ascii 127.

27
ответ дан 1 December 2019 в 18:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: