搜尋
首頁後端開發php教程php關鍵字替換的類別(避免重複替換,保留與還原原始連結)

  1. /*

  2. * 關鍵字匹配類別
  3. * @author ylx * @author ylx
  4. * @packet mipang
  5. * 使用實例
  6. * $str = "綠殼蛋雞撒范德薩下一年,下一年1的灑落開房間盧卡斯地方軍";
  7. * $key = new KeyReplace($str,array("xxxx"=>"sadf","下一年1"=>'http://baidu.com',"下一年"=>'google. com'));
  8. * echo $key->getResultText();
  9. * echo $key->getRuntime();
  10. */
  11. class KeyReplace
  12. {
  13. private $ keys = array();
  14. private $text = "";
  15. private $runtime = 0;
  16. private $url = true;
  17. private $stopkeys = array();
  18. private $private $ all = false;
  19. /**
  20. * @access public
  21. * @param string $text 指定被處理的文章
  22. * @param array $keys 指定字典詞組array(key=>url,...) url可以是數組,如果是數組將隨機替換其中的一個
  23. * @param array $stopkeys 指定停止詞array(key,...) 這裡面的詞將不會被處理
  24. * @param boolean $url true 表示替換成連結否則只替換
  25. * @param boolean $all tr​​ue 表示替換所有找到的詞,否則只替換第一次
  26. */
  27. public function __construct($text='',$keys=array(),$url=true,$stopkeys=array(),$all= false) {
  28. $this->keys = $keys;
  29. $this->text = $text;
  30. $this->url = $url;
  31. $this->stopkeys = $stopkeys ;
  32. $this->all = $all;
  33. }
  34. /**

  35. * 取得處理好的文章
  36. * @access public
  37. * @return string text
  38. */
  39. public function getResultText() {
  40. $start = microtime(true);
  41. $keys = $this->hits_keys();
  42. $keys_tmp = array_keys($keys);

  43. function cmp ($a, $b){

  44. if (mb_strlen($a) == mb_strlen($b)) {
  45. return 0;
  46. }
  47. return (mb_strlen($a) }
  48. usort($keys_tmp,"cmp");

  49. foreach($keys_tmp as $ key){

  50. if(is_array($keys[$key])){

  51. $url = $keys[$key][rand(0,count($keys[$key ])-1)];
  52. }else
  53. $url = $keys[$key];
  54. $this->text = $this->r_s($this- >text,$key,$url);

  55. }

  56. $this->runtime = microtime(true)-$start;
  57. return $ this->text;

  58. }
  59. /**
  60. * 取得處理時間
  61. * @access public
  62. * @return float
  63. */
  64. public function getRuntime() {
  65. return $this->runtime;

  66. }

  67. /**

  68. * 設定關鍵字
  69. * @access public
  70. * @param array $keys array(key=>url,...)
  71. */
  72. public function setKeys($keys) {
  73. $this-> keys = $keys;

  74. }

  75. /**
  76. * 設定停止字
  77. * @access public
  78. * @param array $keys array(key,...)
  79. */
  80. public function setStopKeys($keys) {
  81. $this ->stopkeys = $keys;

  82. }

  83. /**
  84. * 設定文章
  85. * @access public
  86. * @param string $text
  87. */
  88. public function setText($text) {
  89. $this->text = $text;

  90. }

  91. /**

  92. * 用來找出字串裡面命中的關鍵字
  93. * @access public
  94. * @return array $keys 回傳符合的字array(key=>url,...)
  95. */
  96. public function hits_keys(){
  97. $ar = $this->keys;
  98. $ar = $ar?$ar:array();
  99. $result=array();
  100. $str = $this->text;
  101. foreach($ar as $k=>$url){
  102. $k = trim($k);
  103. if(!$k)
  104. continue;
  105. if(strpos($str,$ k)!==false && !in_array($k,$this->stopkeys)){
  106. $result[$k] = $url;
  107. }
  108. }
  109. return $result?$ result:array(); }
  110. /**

  111. * 用來找出字串裡面命中的停止詞
  112. * @access public
  113. * @return array $keys 回傳符合的字array(key,...)
  114. */
  115. public function hit_stop_keys(){
  116. $ar = $this->stopkeys;
  117. $ar = $ar?$ar :array();
  118. $ result=array();
  119. $str = $this->text;
  120. foreach($ar as $k){
  121. $k = trim($k) ;
  122. if(!$ k)
  123. 繼續;
  124. if(strpos($str,$k)!==false && in_array($k,$this->stopkeys)){
  125. $結果[] = $k;
  126. }
  127. }
  128. 回傳 $result?$result:array();
  129. }
  130. /**

  131. * 處理替換過程
  132. * @access private
  133. * @param string $text 被替換者
  134. * @param string $key 關鍵字
  135. * @param string $url 連結
  136. * @return string $text 處理好的文章
  137. */
  138. 蕨函數 r_s ($text,$key,$url){
  139. $tmp = $text;

  140. $stop_keys = $this->hits_stop_keys(); p>

  141. $stopkeys = $tags = $a = array();

  142. if(preg_match_all("#]+>[^] *> ;#su",$tmp,$m)){
  143. $a=$m[0];
  144. foreach($m[0] as $k=>$ z){

  145. $z = preg_replace("###s","#",$z);
  146. $tmp = preg_replace('#'.$z.'#s',"[_a".$k."_]",$tmp,1);
  147. }
  148. };
  149. if(preg_match_all("#]+>#s",$tmp,$m)){

  150. $tags = $m[0] ;
  151. foreach($m[0] as $k=>$z){
  152. $z = preg_replace("###s","#",$z);
  153. $tmp = preg_replace ('#'.$z.'# s',"[_tag".$k."_]",$tmp,1);
  154. }
  155. }
  156. if(!empty($stop_keys ) )){
  157. if(preg_match_all( "#".implode("|",$stop_keys)."#s",$tmp,$m)){
  158. $stopkeys = $m[0];
  159. foreach($m[0] as $k=>$z){
  160. $z = preg_replace("###s","#",$z);
  161. $tmp = preg_replace( ' #'.$z.'#s ',"[_s".$k."_]",$tmp,1);
  162. }
  163. }
  164. }
  165. $key1 = preg_replace ( "#([#()[] *])#s","\\$1",$key);
  166. if($this->url)

  167. $tmp = preg_replace("#(?![_s|[_a|[_|[_t|[_ta|[_tag)]".$key1."(?!agd +_]|gd+_]|d+_] | sd+_]|_])#us",''.$key.'',$tmp,$this->all?-1 : 1);
  168. else
  169. $tmp = preg_replace("#(?![_s|[_a|[_|[_t|] [_ta|[_tag)]".$key1."(?! agd+ _]|gd+_]|d+_]|sd+_]|_])#us",$url,$tmp,$this ->全部?-1:1);
  170. if(!empty($a)){

  171. foreach($a as $n=>$at){

  172. $tmp = str_replace ("[_a".$n."_]",$at,$tmp);

  173. }

  174. }

  175. if(! empty ($tags)){
  176. foreach($tags as $n=>$at){

  177. $tmp = str_replace("[_tag". $ n."_]",$at,$tmp);

  178. }

  179. }

  180. if(!empty($stopkeys)){
  181. foreach($stopkeys as $n=>$at){

  182. $tmp = str_replace("[_s".$n."_]" , $at,$tmp);

  183. }

  184. }

  185. 回傳$tmp;
  186. }
  187. }
複製程式碼


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

您如何從PHP會話中檢索數據?您如何從PHP會話中檢索數據?May 01, 2025 am 12:11 AM

ToretrievedatafromaPHPsession,startthesessionwithsession_start()andaccessvariablesinthe$_SESSIONarray.Forexample:1)Startthesession:session_start().2)Retrievedata:$username=$_SESSION['username'];echo"Welcome,".$username;.Sessionsareserver-si

您如何使用會議來實施購物車?您如何使用會議來實施購物車?May 01, 2025 am 12:10 AM

利用會話構建高效購物車系統的步驟包括:1)理解會話的定義與作用,會話是服務器端的存儲機制,用於跨請求維護用戶狀態;2)實現基本的會話管理,如添加商品到購物車;3)擴展到高級用法,支持商品數量管理和刪除;4)優化性能和安全性,通過持久化會話數據和使用安全的會話標識符。

您如何在PHP中創建和使用接口?您如何在PHP中創建和使用接口?Apr 30, 2025 pm 03:40 PM

本文解釋瞭如何創建,實施和使用PHP中的接口,重點關注其對代碼組織和可維護性的好處。

crypt()和password_hash()有什麼區別?crypt()和password_hash()有什麼區別?Apr 30, 2025 pm 03:39 PM

本文討論了PHP中的crypt()和password_hash()的差異,以進行密碼哈希,重點介紹其實施,安全性和對現代Web應用程序的適用性。

如何防止PHP中的跨站點腳本(XSS)?如何防止PHP中的跨站點腳本(XSS)?Apr 30, 2025 pm 03:38 PM

文章討論了通過輸入驗證,輸出編碼以及使用OWASP ESAPI和HTML淨化器之類的工具來防止PHP中的跨站點腳本(XSS)。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器