Маршрутизация URL: обработка пробелов и запрещенных символов при создании дружественных URL

Если я правильно понимаю, тебе нужно что-то подобное? https://stackblitz.com/edit/angularjs-52l5k7

Если вы хотите повторно использовать вашу модель ng, вам следует использовать ng-bind для привязки данных. https://docs.angularjs.org/api/ng/directive/ngBind

8
задан Robert Harvey 20 February 2013 в 20:07
поделиться

11 ответов

Я сам предпочитаю _ - по причинам удобочитаемости (Вы помещаете подчеркивание на него и _фактически go_away), если Вы собираетесь разделить пробелы.

Можно хотеть попытаться бросить расширенные символы, т.е., ü, к ASCII завершения equivelants, если это возможно, т.е.:

ü-> u

Однако, по моему опыту, самая большая проблема с Фактическими связанными с SEO проблемами, не то, что URL содержит весь прекрасный текст, что, когда люди изменяют текст в ссылке, вся Ваша работа SEO обращается к дерьму, потому что у Вас теперь есть DEADLINKS в индексах.

Для этого я предложил бы то, что stackoverflow делают и имеют числовую часть, которая ссылается на постоянный объект, и полностью проигнорируйте остальную часть текста (и/или обновите его когда его несправедливость),

Кроме того, чрезвычайно hericichial природа просто делает для плохого удобства использования людьми. Люди ненавидят длинные URL. Копия, вставляющая их, сосет, и они просто более подвержены повреждению. Если можно подразделить его на более низкий их, т.е.

/article/1/Some_Article_Title_Here
/article/1/Section/5/Section_Title_Here
/section/19023/Section_Title_here  ( == above link ) 

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

4
ответ дан 5 December 2019 в 15:27
поделиться

Мой последний подход:

  1. Преобразуйте все "странные буквы" в "нормальные буквы"-> à к a, ñ к n, и т.д.
  2. Преобразуйте все несловесные символы в _ (т.е. не a-zA-Z0-9)
  3. группы замены символов нижнего подчеркивания с одинарным подчеркиванием
  4. удалите весь конец и начальные символы подчеркивания

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

4
ответ дан 5 December 2019 в 15:27
поделиться

Решением 2 является типичный подход тех... некоторые улучшения являются возможными, например, превращающими апострофами ни во что вместо тире для удобочитаемости. Обычно Вы захотите сохранить munged-for-URL-validity версию заголовка в базе данных, а также 'реального' заголовка, таким образом, можно будет выбрать объект с помощью индексируемого ВЫБОРА ГДЕ.

Как бы то ни было. Нет никакого фактического запрещенного символа в части пути URL, пока Вы кодируете ее соответственно. Например, пространство, хеш или наклонная черта могут быть закодированы как %20, %23 или %2F. Таким образом, возможно закодировать любую строку в часть URL, таким образом, можно ВЫБРАТЬ его назад из базы данных фактическим, неизменным заголовком.

Существует несколько потенциальных проблем с этим в зависимости от Вашей веб-платформы все же. Например, что-либо на основе CGI будет не мочь сказать различие между закодированным %2F и реальным/, и некоторые платформы/развертывание могут испытать трудности с символами Unicode.

С другой стороны, простое и безопасное решение состоит в том, чтобы включать первичный ключ в URL, с помощью названных частей просто для того, чтобы сделать адрес более хорошим. например:

http://www.example.com/x/category-name/subcat-name/article-name/348254863

Это - то, как, например, Amazon делает это. Это действительно имеет преимущество, что можно изменить заголовок в базе данных и иметь URL со старым перенаправлением заголовка автоматически к новому.

1
ответ дан 5 December 2019 в 15:27
поделиться

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

private static string anglicized(this string urlpart) {
        string before = "àÀâÂäÄáÁéÉèÈêÊëËìÌîÎïÏòÒôÔöÖùÙûÛüÜçÇ’ñ";
        string  after = "aAaAaAaAeEeEeEeEiIiIiIoOoOoOuUuUuUcC'n";

        string cleaned = urlpart;

        for (int i = 0; i < avantConversion.Length; i++ ) {

            cleaned = Regex.Replace(urlpart, before[i].ToString(), after[i].ToString());
        }

        return cleaned;

        // Here's some for Spanish : ÁÉÍÑÓÚÜ¡¿áéíñóúü"

}

Не знайте, является ли это самый эффективный Regex, но это, конечно, эффективно. Это - дополнительный метод так для вызова его, Вы просто помещаете метод в Статический Класс и делаете что-то как это:

string articleTitle = "My Article about café and the letters àâäá";
string cleaned = articleTitle.anglicized();

// replace spaces with dashes
cleaned = Regex.Replace( cleaned, "[^A-Za-z0-9- ]", "");

// strip all illegal characters like punctuation
cleaned = Regex.Replace( cleaned, " +", "-").ToLower();

// returns "my-article-about-cafe-and-the-letters-aaaa"

Конечно, Вы могли объединить его в один метод под названием "CleanUrl" или что-то, но Вам решать

1
ответ дан 5 December 2019 в 15:27
поделиться

Как продолжение. У меня действительно есть некоторые идеи. Поэтому не стесняйтесь комментировать идеи или давать Ваш собственный ответ на вопрос:

Решение № 1: Замените все запрещенные символы тире:

  • www.mysite.com/diseases---conditions/Auto-immune-disorders/the--1-killer-of-people-is-some-disease/

Это выглядит немного ужасным мне...

Решение № 2: Разделите запрещенные символы и замените пробелы единственными тире:

  • www.mysite.com/diseases-conditions/Auto-immune-disorders/the-1-killer-of-people-is-some-disease/

Решение № 3 Примените несколько правил заменить определенные символы словами:

  • www.mysite.com/diseases-and-conditions/Auto-immune-disorders/the-number1-killer-of-people-is-some-disease/

Решение № 4 Разделите Все Пробелы и используйте Капитализацию

  • www.mysite.com/DiseasesAndConditions/AutoImmuneDisorders/TheNumber1KillerOfPeopleIsSomeDisease/

(Может не работать хорошо над чувствительными к регистру серверами и тверд читать),

0
ответ дан 5 December 2019 в 15:27
поделиться

В случае, если любому интересно. Это - маршрут (oooh... остроумный), я беру:

Route r = new Route("{country}/{lang}/Article/{id}/{title}/", new NFRouteHandler("OneArticle"));
Route r2 = new Route("{country}/{lang}/Section/{id}-{subid}/{title}/", new NFRouteHandler("ArticlesInSubcategory"));
Route r3 = new Route("{country}/{lang}/Section/{id}/{title}/", new NFRouteHandler("ArticlesByCategory"));

Это предлагает мне способность сделать URL как так:

  • site.com/ca/en/Article/123/my-life-and-health
  • site.com/ca/en/Section/12-3/Health-Issues
  • site.com/ca/en/Section/12/
1
ответ дан 5 December 2019 в 15:27
поделиться

Решением 2 была бы моя рекомендация. Я не крупнейший в мире эксперт по SEO, но я полагаю, что это - в значительной степени 'стандартный' способ получить хорошие рейтинги так или иначе.

0
ответ дан 5 December 2019 в 15:27
поделиться

Что я делаю обычно должен позволять только допустимый символ и сохранять дружественный URL максимально коротким. Также важный то, что дружественные URL часто вставляются человеком, я никогда не генерирую дружественный URL из заголовка или содержания, и затем использую то для запросов базы данных. Я использовал бы столбец в таблице, например, friendly_url, так, чтобы администратор веб-сайта мог вставить дружественные URL.

0
ответ дан 5 December 2019 в 15:27
поделиться

Я решил эту проблему путем добавления дополнительного столбца в базе данных (например: UrlTitle вместе со столбцом Title), и сохранение заголовка лишило всех запрещенных символов с '&' символы, замененные 'и', и пробелы, замененные символами нижнего подчеркивания. Затем Вы можете поиск через UrlTitle и использовать реальный в названии страницы или везде, где.

0
ответ дан 5 December 2019 в 15:27
поделиться

Я предлагаю делать то, что Wordpress делает - полоса, небольшие слова и replce запрещенные символы с тире (макс. 1 тире) затем позволяют пользователю исправить URL, если они хотят. Это лучше, чтобы SEO сделала URL настраивающимся.

0
ответ дан 5 December 2019 в 15:27
поделиться

As a client user, not a Web designer, I find Firefox sometimes breaks the URL when it tries to replace "illegal" characters with usable ones. For example, FF replaces ~ with %7E. That never loads for me. I can't understand why the HTML editors and browsers don't simply agree not to accept characters other than A-Z and 0-9. If certain scripts need %, ?, and such, change the scripting applications so they will work with alpha numeric.

0
ответ дан 5 December 2019 в 15:27
поделиться
Другие вопросы по тегам:

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