Как я могу создать SEO дружественный разграниченный тире URL из строки?

Функция time.time() возвращает количество секунд, начиная с эпохи, в секундах. Обратите внимание, что «эпоха» определяется как начало 1 января 1970 года в UTC. Таким образом, эпоха определяется в терминах UTC и устанавливает глобальный момент времени. Независимо от того, где вы находитесь «секунды прошлой эпохи» (time.time ()) возвращает одно и то же значение в тот же момент.

Вот несколько примеров, которые я запускал на своем компьютере, преобразовывая его в строку как [. g2]

Python 2.7.3 (default, Apr 24 2012, 00:00:54) 
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>

Переменная ts - это время, возвращаемое в секундах. Затем я преобразовал его в строку, используя библиотеку datetime, создав для нее строку, которая читается человеком.

17
задан 3 revs, 3 users 65% 21 January 2009 в 15:38
поделиться

9 ответов

Вот мое решение в C#

private string ToSeoFriendly(string title, int maxLength) {
    var match = Regex.Match(title.ToLower(), "[\\w]+");
    StringBuilder result = new StringBuilder("");
    bool maxLengthHit = false;
    while (match.Success && !maxLengthHit) {
        if (result.Length + match.Value.Length <= maxLength) {
            result.Append(match.Value + "-");
        } else {
            maxLengthHit = true;
            // Handle a situation where there is only one word and it is greater than the max length.
            if (result.Length == 0) result.Append(match.Value.Substring(0, maxLength));
        }
        match = match.NextMatch();
    }
    // Remove trailing '-'
    if (result[result.Length - 1] == '-') result.Remove(result.Length - 1, 1);
    return result.ToString();
}
10
ответ дан 30 November 2019 в 12:51
поделиться

Я выполнил бы эти шаги:

  1. преобразовывают строку в нижний регистр
  2. , нежелательные символы замены дефисами
  3. заменяют несколько дефисов одним дефисом (не необходимый как preg_replace(), вызов функции уже предотвращает несколько дефисов)
  4. , удаляют дефисы при начинании и конце если необходимый
  5. обрезка в случае необходимости от последнего дефиса перед положением x до конца

Так, все вместе в функции (PHP):

function generateUrlSlug($string, $maxlen=0)
{
    $string = trim(preg_replace('/[^a-z0-9]+/', '-', strtolower($string)), '-');
    if ($maxlen && strlen($string) > $maxlen) {
        $string = substr($string, 0, $maxlen);
        $pos = strrpos($string, '-');
        if ($pos > 0) {
            $string = substr($string, 0, $pos);
        }
    }
    return $string;
}
7
ответ дан 30 November 2019 в 12:51
поделиться

C#

public string toFriendly(string subject)
{
    subject = subject.Trim().ToLower();
    subject = Regex.Replace(subject, @"\s+", "-");
    subject = Regex.Replace(subject, @"[^A-Za-z0-9_-]", "");
    return subject;
}
4
ответ дан 30 November 2019 в 12:51
поделиться

Вот решение для php:

function make_uri($input, $max_length) {
  if (function_exists('iconv')) {  
    $input = @iconv('UTF-8', 'ASCII//TRANSLIT', $input);  
  }

  $lower = strtolower($input);


  $without_special = preg_replace_all('/[^a-z0-9 ]/', '', $input);
  $tokens = preg_split('/ +/', $without_special);

  $result = '';

  for ($tokens as $token) {
    if (strlen($result.'-'.$token) > $max_length+1) {
      break;
    }

    $result .= '-'.$token;       
  }

  return substr($result, 1);
}

использование:

echo make_uri('In C#: How do I add "Quotes" around string in a ...', 500);

, Если Вам не нужен uris, чтобы быть typable, они не должны быть маленькими. Но необходимо определить максимум так, чтобы URL работали хорошо с прокси и т.д.

2
ответ дан 30 November 2019 в 12:51
поделиться

Немного более чистый способ сделать это в PHP, по крайней мере:

function CleanForUrl($urlPart, $maxLength = null) {
    $url = strtolower(preg_replace(array('/[^a-z0-9\- ]/i', '/[ \-]+/'), array('', '-'), trim($urlPart)));
    if ($maxLength) $url = substr($url, 0, $maxLength);
    return $url;
}

Мог бы также сделать trim() в запуске, таким образом, существует меньше для обработки позже, и полная замена, покончили в preg_replace().

Thxs к cg для предложения большей части из этого: , На чем лучший способ состоит в том, чтобы убрать строку для размещения в URL, как имя вопроса ТАК?

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

Лучшая версия:

function Slugify($string)
{
    return strtolower(trim(preg_replace(array('~[^0-9a-z]~i', '~-+~'), '-', $string), '-'));
}
2
ответ дан 30 November 2019 в 12:51
поделиться

Solution in Perl:

my $input = 'In C#: How do I add "Quotes" around string in a comma delimited list of strings?';

my $length = 20;
$input =~ s/[^a-z0-9]+/-/gi;
$input =~ s/^(.{1,$length}).*/\L$1/;

print "$input\n";

done.

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

Решение в оболочке:

echo 'In C#: How do I add "Quotes" around string in a comma delimited list of strings?' | \
    tr A-Z a-z | \
    sed 's/[^a-z0-9]\+/-/g;s/^\(.\{1,20\}\).*/\1/'
1
ответ дан 30 November 2019 в 12:51
поделиться

In a dynamic URL, these IDs are passed via the query string to a script that ... as the delimiting character because most search engines treat the dash as a ... NET: A Developer's Guide to SEO also covers these three additional methods search engine optimization

0
ответ дан 30 November 2019 в 12:51
поделиться
Другие вопросы по тегам:

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