отсканируйте строку и замените теги ссылками - PullRequest
2 голосов
/ 05 мая 2011

У меня есть такой массив:

$keywords = array( 'php', 'html', 'css' );

У меня есть запрос БД для возврата абзаца, который содержит ключевые слова, ранее упомянутые в массиве.

У меня есть шаблон ссылкинапример:

$linktpl = '<a href="%s" title="%s">%s</a>';

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

Иесли возможно, я хочу, чтобы он принимал во внимание единственное и множественное число (например, фреймворки и фреймворки)

и безопасно ли для SEO делать это автоматическое связывание ключевых слов?

Любые идеи?

Ответы [ 7 ]

4 голосов
/ 05 мая 2011
$string = 'this is the php test subject.';

// associate keywords with their urls
$urls = array(
'php' => 'http://www.php.net',
// and etc...
);

// this callback will take the matches from preg and generate the
// html link making use of the $urls dictionary
$linker = function($matches) use($urls) {
    $urlKey = strtolower($matches[1]);
    return sprintf(
      '<a href="%s" title="%s">%s</a>',
      $urls[$urlKey], $matches[1], $matches[1]
    );
};

// do the magic
$regex = '/\b(' . preg_quote(implode('|', $keywords), '/') . ')\b/i';
preg_replace_callback($regex, $linker, $string);

Преимущество использования регулярных выражений состоит в том, что мы можем использовать модификатор \b, чтобы гарантировать, что мы отлавливаем такие случаи, как (php), PHP. или phpp и правильно с ними работаем.

2 голосов
/ 05 мая 2011

Это будет работать, но это не обязательно лучший способ. Он объединяет ваш массив с символами канала и использует эту строку для построения регулярного выражения. preg_replace() затем делает все остальное. Требуется изменить шаблон ссылки для использования стиля preg_replace() вместо стиля printf()

preg_replace("/\b(" . implode("|", $keywords) .")\b/", "<a href='\\1'>\\1</a>", $paragraph);

РЕДАКТИРОВАТЬ : добавлены \b границы слов, чтобы вы соответствовали только целым словам, а не внутренним подстрокам.

1 голос
/ 05 мая 2011

Для вашего основного вопроса достаточно одного из 3 приведенных выше ответов.

По этому вопросу:

and is it safe for SEO to make this automated keyword linking?

Это достаточно безопасно ..

Но естьВот некоторые проблемы, которые необходимо решить

  1. Проверьте страницу 13 в этом Руководстве по SEO от Google .Поэтому всегда лучше иметь хороший якорный текст.Я предполагаю, что с помощью этого метода вы не получите очень правильный.

  2. Как объяснил Брэд, не переусердствуйте.Следовательно, может быть только 2-3 ключевых слова на страницу, 1 ссылка на ключевое слово в абзаце и всего 6-7 ссылок на странице.Вы должны быть осторожны, чтобы не иметь много ссылок.

  3. "Атрибут title определяет дополнительную информацию об элементе."Поэтому выгрузка только одного ключевого слова может не помочь.

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

1 голос
/ 05 мая 2011

Во-первых, это может быть намного сложнее, чем кажется.А именно, это заменит слова, которые находятся внутри слова, т.е. если бы у нас было script, то термин javascript был бы наполовину ссылкой, наполовину словом.Я не знаю, если вы заботитесь.Один из способов исправить это - добавить пробелы до и после слова.Но опять же, это как проблемы, а как насчет пунктуации?(.,!?) и т. д.

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

Просто некоторые вещи для размышления.Я думаю, что на SO уже есть немало примеров, поэтому, возможно, стоит поискать на этом сайте, чтобы увидеть, что вы можете найти.Учитывая чрезмерную сложность, я не могу предоставить этот код.Если вам просто нужен простой метод, остальные, которые разместили, должны работать просто отлично.


Некоторые ссылки:

Замена ключевых слов в тексте php & mysql

0 голосов
/ 05 мая 2011

и является ли безопасным для SEO создание этой автоматической ссылки на ключевые слова?

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

0 голосов
/ 05 мая 2011
$paragraph = /* YOUR PARAGRAPH CONTENT */;
$paragraph = str_replace( array( 'php' , 'html' , 'css' ) , array( '<a href="url/php/" title="php">PHP</a>' , '<a href="url/html/" title="html">HTML</a>' , '<a href="url/css/" title="css">CSS</a>' ) , $paragraph );
0 голосов
/ 05 мая 2011

str_replace() почти наверняка будет самым быстрым способом выполнения поиска / замены

Я бы посоветовал вам сначала создать массив поисковых слов, затем замены, а затем выполнить замену.

$searches = array("php", "html", "css");
$replacements = array();
while($row = mysql_fetch_assoc($r) {
    $replacements[] = sprintf($linktmpl, $row['url'], $row['title'], $row['word']);
}
$html = str_replace($searches, $replacements, $html);
...