PDA

View Full Version : [Hỏi] Tự chèn link vào từ khóa trong bài viết !



Nhoc.Maru
31-10-2011, 10:05
Vấn đề : mình muốn khi xuất bài viết vào CSDL thì những từ khóa trong kho từ khóa sẽ được tự động chèn link của từ khóa đó rồi mới insert vào CSDL

Ví dụ :
- từ khóa thiết kế web - link : http://www.thietkeweb.com
- thì trong bài viết có xuất hiện từ khóa thiết kế web sẽ bị thay bằng <a href="http://www.thietkeweb.com">Thiết kế web </a>

Mình có tìm hiểu qua hai hàm preg_match (để coi có từ khóa không) và preg_replace (để thay thế)
Nhưng như vậy mình chỉ có thể làm được một từ khóa thôi.
với một danh sách từ khóa thì mình giải quyết sao đây các bạn ? chẳng lẽ dùng vòng lặp. như vậy thì code hơi bị chậm vì bài viết đâu có ngắn.

- với một vấn đề nữa là tiếng việt có dấu và không dấu.

Mong các bạn giúp đỡ

Nhoc.Maru
31-10-2011, 10:31
mình tìm được cái function này mọi người cho ý kiến nha
<?php
/**
* Highlight keyword in a string
*
* @param string $text
* @param string $keyword
* @return string
*/
public function highlightKeywords($text, $keyword)
{
$output = '';

$words = array();

preg_match_all('#(?:"([^"]+)"|(?:[^\s\+\-"\(\)>< ~\*\'\|\\`\!@\#\$%^&_=\[\]\{\}:;,\./\?]+))#si', $keyword, $matches, PREG_SET_ORDER);

foreach ($matches as $match)
{
if (2 === count($match)) {
$words[] = $match[1];
} else {
$words[] = $match[0];
}
}

$words = implode('|', $words);

$textParts = preg_split('#(<.+?>)#si', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

foreach ($textParts as $byHtmlPart)
{
if ($byHtmlPart{0} != '< ') {
$byHtmlPart = preg_replace('#(' . $words . ')#si', '<span class="highlight">\1</span>', $byHtmlPart);
}

$output .= $byHtmlPart;
}

return $output;
}

?>

Nhoc.Maru
31-10-2011, 10:32
nó giải quyết được khoản in đậm từ khóa
nhưng còn vấn đề link cho từ khóa thì chứ vì mình tính mỗi từ khóa sẽ dẫn tới một link khác nhau

bionetvn
31-10-2011, 11:06
nó giải quyết được khoản in đậm từ khóa
nhưng còn vấn đề link cho từ khóa thì chứ vì mình tính mỗi từ khóa sẽ dẫn tới một link khác nhau

k nhất thiết là vậy tùy vào muốn đặt link nào vào tư khóa nào.

boykhat
31-10-2011, 12:31
Kiểu gì cũng phải dùng vòng lặp, mà việc xuất CSDL chỉ diễn ra 1 lần thì sợ gì nhanh hay chậm bác nhỉ

ngoc_viet08
31-10-2011, 13:09
str_replace ............. :whistling