Tôi có văn bản ($text
) và một loạt các từ ($tags
). Những từ này trong văn bản phải được thay thế bằng các liên kết đến các trang khác để chúng không phá vỡ các liên kết hiện có trong văn bản. Trong CakePHP có một phương thức trong TextHelper để làm điều này nhưng nó bị hỏng và nó phá vỡ các liên kết HTML hiện có trong văn bản. Phương pháp giả sử để làm việc như thế này:Thay thế các từ có liên kết thẻ bằng PHP
$text=Text->highlight($text,$tags,'<a href="/tags/\1">\1</a>',1);
Dưới đây có mã hiện có trong CakePHP TextHelper:
function highlight($text, $phrase, $highlighter = '<span class="highlight">\1</span>', $considerHtml = false) {
if (empty($phrase)) {
return $text;
}
if (is_array($phrase)) {
$replace = array();
$with = array();
foreach ($phrase as $key => $value) {
$key = $value;
$value = $highlighter;
$key = '(' . $key . ')';
if ($considerHtml) {
$key = '(?![^<]+>)' . $key . '(?![^<]+>)';
}
$replace[] = '|' . $key . '|ix';
$with[] = empty($value) ? $highlighter : $value;
}
return preg_replace($replace, $with, $text);
} else {
$phrase = '(' . $phrase . ')';
if ($considerHtml) {
$phrase = '(?![^<]+>)' . $phrase . '(?![^<]+>)';
}
return preg_replace('|'.$phrase.'|i', $highlighter, $text);
}
}
Tôi không hỏi về đánh dấu. Vui lòng đọc câu hỏi. – Amorphous
Bạn sẽ cung cấp mẫu '$ text' để xem? Mã hoạt động tốt khi tôi kiểm tra nó. Tôi có thể nói rằng có thể là '$ tags' mà bạn đang tìm kiếm để thay thế có thể tồn tại bên trong một thẻ'