Как обработать диакритические знаки (диакритические знаки) при перезаписи 'симпатичных URL'

Не знаю, ищет ли кто-нибудь это. У меня такая же проблема. Выбор в запросе, а затем выполнение того, где (или объединение) и использование переменной выбора разрешили проблему для меня. (проблема была в коллекции «Reintegraties» для меня)

query.Select(zv => new
            {
                zv,
                rId = zv.this.Reintegraties.FirstOrDefault().Id
            })
            .Where(x => !db.Taken.Any(t => t.HoortBijEntiteitId == x.rId
                                             && t.HoortBijEntiteitType == EntiteitType.Reintegratie
                                             && t.Type == TaakType))
            .Select(x => x.zv);

надеюсь, что это кому-то поможет.

19
задан Jacco 22 January 2009 в 00:23
поделиться

5 ответов

В конечном счете Вы оказываетесь перед необходимостью разочаровываться в идее "корректных" для этой проблемы. Перевод строки, неважно, как Вы делаете это, уничтожает точность от имени совместимости и удобочитаемости. Все три опции одинаково совместимы, но № 1 и № 2 страдают с точки зрения удобочитаемости. Поэтому просто выполненный с ним и идут для любых взглядов лучший — опция № 3.

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

, С другой стороны, если немецкий язык является более высоким беспокойством, чем другие языки, сделайте свой перевод всегда , используют немецкую версию, когда каждый существует: ä в † ’ae, ë в †’ e, ï в † ’i, ö в †’ oe, ü в † ’ue.

Редактирование:

, О, и что касается фактического метода, я перевел бы особые случаи, если таковые имеются, через [1 111], затем использовать iconv для остальных:

$text = str_replace(array("ä", "ö", "ü", "ß"), array("ae", "oe", "ue", "ss"), $text);
$text = iconv('UTF-8', 'US-ASCII//TRANSLIT', $text);
16
ответ дан 30 November 2019 в 04:44
поделиться

Мне третье является самым читаемым.

Вы могли использовать немного словаря, например, ï -> i и ü -> ue, чтобы указать, как Вы хотели бы, чтобы различный charcaters был переведен.

3
ответ дан 30 November 2019 в 04:44
поделиться

Как интересное примечание стороны, на том, ТАКИМ ОБРАЗОМ, ничто, кажется, действительно не имеет значения после идентификатора - это - ссылка на эту страницу:

, Как обработать диакритические знаки (диакритические знаки) при перезаписи ' симпатичный URLs'

, Очевидно, мотивация должна позволить изменения заголовка, не разрывая связи, и можно хотеть рассмотреть ту функцию также.

1
ответ дан 30 November 2019 в 04:44
поделиться

Теперь люди могут записать заголовки, содержащие любой символ UTF-8, но большинство не позволяется в URL.

Наоборот, большинство позволяется. Посмотрите, например, URL Википедии - вещи как http://en.wikipedia.org/wiki/CafГ© (иначе http://en.wikipedia.org/wiki/Caf%C3%A9 ) дисплей приятно - даже если маркер StackOverflow не выбирает их правильно :-)

, прием читает их надежно через любую среду хостинга; существуют проблемы с CGI и серверами Windows, особенно IIS, например.

0
ответ дан 30 November 2019 в 04:44
поделиться

Приятная тема, у меня была такая же проблема некоторое время назад.
Вот как я исправил его:

function title2url($string=null){
 // return if empty
 if(empty($string)) return false;

 // replace spaces by "-"
 // convert accents to html entities
 $string=htmlentities(utf8_decode(str_replace(' ', '-', $string)));

 // remove the accent from the letter
 $string=preg_replace(array('@&([a-zA-Z]){1,2}(acute|grave|circ|tilde|uml|ring|elig|zlig|slash|cedil|strok|lig){1};@', '@&[euro]{1};@'), array('${1}', 'E'), $string);

 // now, everything but alphanumeric and -_ can be removed
 // aso remove double dashes
 $string=preg_replace(array('@[^a-zA-Z0-9\-_]@', '@[\-]{2,}@'), array('', '-'), html_entity_decode($string));
}

Вот как работает моя функция:

  1. Преобразовать его в HTML-объекты
  2. Стрит вкладки
  3. Удалить все оставшиеся странные символы
1
ответ дан 30 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

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