10/10/2018, 11:30
[Hỏi] Tự chèn link vào từ khóa trong bài viết !
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 đỡ
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 đỡ
Bài liên quan
<?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;
}
?>
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