> 백엔드 개발 > PHP 튜토리얼 > 사이트 키워드 링크 뒤의 공백을 PHP 정규 표현식_php 팁으로 바꾸는 솔루션

사이트 키워드 링크 뒤의 공백을 PHP 정규 표현식_php 팁으로 바꾸는 솔루션

WBOY
풀어 주다: 2016-05-16 20:36:01
원래의
1006명이 탐색했습니다.

이 제목이 적절한지 아닌지 모르겠습니다. 구체적인 상황은 다음과 같습니다. 웹 사이트에서 키워드 링크 기능을 추가하려고 하는데 기사의 내용을 일치시키고 정규 표현식으로 대체한 다음 preg_replace 기능을 사용합니다. 대체된 프로그램 코드는 다음과 같습니다.

function ReplaceKeyword($linkDefs,$content){
$linkMap = array();

/*foreach($linkDefs as $row) {
$linkMap[] = explode(',', $row);
}*/
$linkMap = $linkDefs;

//把原有的链接替换成文字
foreach($linkMap as $row) {
$content = preg_replace('/(<a.*&#63;>\s*)('.$row[0].')(\s*<\/a>)/sui', $row[0], $content);
}

//关键字从长至短排序
usort($linkMap, '_sortDesc');
//var_dump($linkMap);

$tmpKwds = array(); //存放暂时被替换的子关键字

$k_count=0;
foreach($linkMap as $i=>$row) {
list($kwd, $url) = $row;
for($j=$i+1; $j<count($linkMap); $j++) {
$subKwd = $linkMap[$j][0];
//如果包含其他关键字,暂时替换成其他字符串,如 茶叶 变成 
if(strpos($kwd, $subKwd) !== false) {
$tmpKwd = '';
$kwd = str_replace($subKwd, $tmpKwd, $kwd);
$tmpKwds[$tmpKwd] = $subKwd;
}
}
//把文字替换成链接
require(MLEINC.'/config/globals.config.php');
$th_num = $config['keyword_num']; //关键字替换次数
$content = preg_replace('/('.$row[0].')/sui', '<a href="'.$row[1].'">'.$kwd.'</a>', $content, $th_num ,$count); // 所有的匹配项都会被替换
$k_count+=$count;
}

//把代替子关键字的字符串替换回来
foreach($tmpKwds as $tmp=>$kwd) {
$content = str_replace($tmp, $kwd, $content);
}
$result = array($content,$k_count);

return $result;
unset($result);
unset($tmp);
unset($tmpKwds);
unset($kwd);
unset($count);
unset($config);
unset($linkMap);
unset($linkDefs);
unset($tmpKwd);
unset($content);
unset($th_num);
unset($row);
unset($k_count);
}
로그인 후 복사

프로그램은 온라인에서 찾아서 로컬에서 테스트해보니 정상이었습니다. 로컬 환경은 PHP 5.3이었는데, 인터넷에 올려보니 처음엔 PHP 버전인 줄 알았어요. 문제이고 그것이 ereg라고 생각했습니다. preg의 차이점은 교체 후에도 여전히 작동하지 않습니다. 나중에 인터넷을 찾아보니 일부 네티즌들이 pcre.backtrack_limit과 pcre.recursion_limit만 조정하면 충분하다고 말하는 것을 발견했고, 효과가 있었습니다. 설정 문제인 것 같지만, 일반적인 상황에서는 PHP의 기본 설정으로는 문제가 없을 것입니다. 제가 직접 작성한 프로그램은 아직 충분하지 않습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿