Как Вы удаляете недопустимые символы при создании дружественного URL (т.е. как Вы создаете краткий заголовок)?

Скажите, что у меня есть эта веб-страница:
http://ww.xyz.com/Product.aspx?CategoryId=1

Если бы название CategoryId=1 является "Собаками", я хотел бы преобразовать URL во что-то вроде этого:
http://ww.xyz.com/Products/Dogs

Проблема состоит в том, если название категории содержит внешний (или недопустимый для URL) символы. Если названием CategoryId=2 является "Göra äldre", каков должен быть новый URL?

Логически это должно быть:
http://ww.xyz.com/Products/Göra äldre
но это не будет работать. Во-первых из-за пространства (который я могу легко заменить тире, например), но что относительно внешних символов? В Asp.net я мог использовать функцию URLEncode, которая даст что-то вроде этого:
http://ww.xyz.com/Products/G%c3%b6ra+%c3%a4ldre
но я не могу действительно сказать, что это лучше, чем исходный URL (http://ww.xyz.com/Product.aspx?CategoryId=2)

Идеально я хотел бы генерировать этого, но как может, я могу сделать это автоматически (т.е. преобразование внешних символов к 'безопасным' символам URL):
http://ww.xyz.com/Products/Gora-aldre

12
задан Anthony 20 July 2010 в 11:40
поделиться

2 ответа

Я придумал 2 следующих метода расширения (asp.net / C#):

     public static string RemoveAccent(this string txt)
    {
        byte[] bytes = System.Text.Encoding.GetEncoding("Cyrillic").GetBytes(txt);
        return System.Text.Encoding.ASCII.GetString(bytes);
    }

    public static string Slugify(this string phrase)
    {
        string str = phrase.RemoveAccent().ToLower();
        str = System.Text.RegularExpressions.Regex.Replace(str, @"[^a-z0-9\s-]", ""); // Remove all non valid chars          
        str = System.Text.RegularExpressions.Regex.Replace(str, @"\s+", " ").Trim(); // convert multiple spaces into one space  
        str = System.Text.RegularExpressions.Regex.Replace(str, @"\s", "-"); // //Replace spaces by dashes
        return str;
    }
27
ответ дан 2 December 2019 в 05:26
поделиться

Транслитерировать символы, отличные от ASCII, в ASCII, используя что-то вроде этого:

var str = "éåäöíØ";
var noApostrophes = Encoding.ASCII.GetString(Encoding.GetEncoding("Cyrillic").GetBytes(str)); 

=> "eaaoiO"

( Источник )

2
ответ дан 2 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

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