php關鍵字過濾演算法
① PHP數據過濾的幾種方式
調度方法
這種方法是來用一個單源一的 php 腳本調度(通過 URL)。其他任何操作在必要的時候使用include或require包含進來。這種方法一般需要每個 URL 都傳遞一個單獨的GET變數用於調度。這個GET變數可以被認為是用來替代腳本名稱的更加簡化的設計。
② PHP 字元串關鍵字匹配
只要內容中有關鍵字就替換成超鏈接
functionTextHandle($source,Array$texts){
/**
*@sourceString需要處理的源字元串
*@textsArray需要替換的所有關鍵字
*
*/
foreach($textsAS$text){
$source=str_replace($text,"<ahref=''>".$text."</a>",$source);
}
return$source;
}
$source="你好,我是一個帥哥";
echoTextHandle($source,['你好','帥哥']);//將[你好][帥哥]替換掉.
③ PHP中怎麼實現關鍵字搜索
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=utf-8">
</head>
<style type="text/css">
body{
font-size: 12px;font-family: verdana;width: 100%;
}
div.page{
text-align: center;
}
div.content{
height: 300px;
}
div.page a{
border:#aaaadd 1px solid;text-decoration: none;padding: 2px 5px 2px 5px;margin: 2px;
}
div.page span.current{
border:#000099 1px solid;background-color: #000099;padding: 2px 5px 2px 5px;margin: 2px;color: #fff;font-weight: bold;
}
div.page span.disable{
border:#eee 1px solid;padding:2px 5px 2px 5px; margin: 2px;color:#ddd;
}
div.page form{
display: inline;
}
</style>
<body>
<?php
//設置級別錯誤,通知類除外
error_reporting('E_ALL&~E_NOTICE');
/**1---傳入頁碼,使用GET獲取**/
$page=$_GET['p'];
/**2---根據頁碼取出數據:php->mysql處理**/
$host="localhost";
$username="root";
$password="root";
$db="db4"; //資料庫
$mysql_table="person"; //數據表
$table_guanjianzi="think"; //關鍵字
$pageSize=10;
$showPage=5;
//連接資料庫,面向過程
$conn=mysqli_connect($host,$username,$password);
if(!$conn){
echo "資料庫連接失敗";
exit;
}
//選擇所要操作的資料庫
mysqli_select_db($conn,$db);
//設置資料庫編碼格式
mysqli_query($conn,"SET NAMES UTF8");
//編寫sql獲取分頁數據 SELECT * FROM 表名 LIMIT 起始位置,顯示條數
//注意:以下id,name,age,say都是欄位節點名,person是表名,db4是資料庫名,think是指定的關鍵字.
$sql = "SELECT id, name, age, say
FROM person
WHERE say LIKE '%{$table_guanjianzi}%' order by id ASC LIMIT ".($page-1)*$pageSize .",{$pageSize}"; //雙引號能包單引號,反過來不行,會出錯./
// $sql = 'SELECT id, name, age, say
// FROM person
// WHERE say LIKE "%'think'%" order by id ASC LIMIT '.($page-1)*$pageSize .",{$pageSize}";
// 節點名 關鍵字 節點名 可指定數量limit後可寫一個指定的數字
//$sql="select * from $mysql_table"
//$sql='select * from data where Id='.$id.' order by '.$item.' desc';
//把sql語句傳送到資料庫
$result=mysqli_query($conn,$sql);
//將數據顯示到table中,並未table設置格式
echo "<div class='content'>";
echo "<table border=1 cellspacing=0 width=30% align=center>";
echo "<tr><td>ID</td><td>NAME</td><td>say</td></tr>";
while ($row = mysqli_fetch_assoc($result)) {
echo "<tr>";
echo "<td>{$row['id']}</td>";
echo "<td>{$row['name']}</td>";
echo "<td>{$row['say']}</td>";
echo "<tr>";
}
echo "</table>";
echo "</div>";
//釋放結果
mysqli_free_result($result);
//獲取數據總條數
$total_sql="SELECT COUNT(*)FROM $mysql_table";
$total_result=mysqli_fetch_array(mysqli_query($conn,$total_sql));
$total=$total_result[0];
$total_pages=ceil($total/$pageSize);
//關閉資料庫
mysqli_close($conn);
/**3---顯示數據+顯示分頁條**/
$page_banner="<div class='page'>";
//計算偏移量
$pageoffset=($showPage-1)/2;
//兩種情況下 首頁、上一頁 的顯示效果
if($page>1){
$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=1'>首頁</a>";
$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=" .($page-1) . "'><上一頁</a>";
}else{
$page_banner .="<span class='disable'>首頁</span>";
$page_banner .="<span class='disable'><上一頁</span>";
}
//顯示
$start=1;
$end=$total_pages;
//當總條數大於分頁數時
if($total_pages>$showPage){
if($page>$pageoffset+1){
$page_banner .="...";
}
if($page>$pageoffset){
$start=$page-$pageoffset;
$end=$total_pages>$page+$pageoffset?$page+$pageoffset:$total_pages;//三段式
}
//最前面幾個特殊頁號的顯示。當前指的是頁號1或者2時
else{
$start=1;
$end=$showPage;
}
//最後面幾個特殊頁號的顯示,當前顯示的是頁號7和8
if($page+$pageoffset>$total_pages){
$start=$start-($page+$pageoffset-$end);//注意理解這一句
}
}
//顯示頁碼
for($i=$start;$i<=$end;$i++){
//當前頁頁碼上顯示背景色
if($page==$i){
$page_banner .="<span class='current'>{$i}</span>";
}
//非當前頁碼顯示
else{
$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=" .$i . "'>{$i}</a>";
}
}
if($total_pages>$showPage&&$total_pages>$page+$pageoffset){
$page_banner .="...";
}
//兩種情況下的尾頁、下一頁 的顯示效果
if($page<$total_pages){
$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=" .($page+1) . "'>下一頁></a>";
$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=$total_pages'>尾頁</a>";
}else{
$page_banner .="<span class='disable'>尾頁</span>";
$page_banner .="<span class='disable'>下一頁></span>";
}
$page_banner .= "共{$total_pages}頁,";
$page_banner .= "<form action='mypage.php' method='get'>";
$page_banner .= " 到第<input type='text' size=2 value='1' name='p'>頁";
$page_banner .= "<input type='submit' value='確定'>";
$page_banner .= "</form>";
$page_banner .= "</div>";
echo $page_banner;
?>
</body>
</html>
④ php 過濾重復片語 相同關鍵詞測過濾掉
樓上瞎扯淡,人家是要實現過濾重復片語,不是要你對他的代碼做解釋
function replaceRepeated($words)
{
$arrSrc =explode(" ",$words);
$arrDst =array();
foreach($arrSrc as $key=>$val)
{
if(!in_array($val,$arrDst))$arrDst[] =$val;
}
return join(" ",$arrDst);
}
$str ="大家好 今天天氣真好啊 在幹麼啊 今天天氣真好啊 沒干什麼啊";
echo replaceRepeated($str);//輸出大家好 今天天氣真好啊 在幹麼啊 沒干什麼啊
演算法很簡單:
將原來的語句用空格分隔到數組,然後定義另外一個數組存放過濾後的片語,在循環式檢查當前字元串在第二個數組中是否存在,不存在則存放到第二個數組,最後函數返回第二個數組即可
⑤ php過濾指定字元的函數
explode — 使用一個字元串分割另一個字元串
array explode ( string $delimiter , string $string [, int $limit ] )
此函數返回由字元串組成的數組,每個元素專都是 string 的一個屬子串,它們被字元串 delimiter 作為邊界點分割出來。
<?php
//示例1
$pizza="";
$pieces=explode("",$pizza);
echo$pieces[0];//piece1
echo$pieces[1];//piece2
//示例2
$data="foo:*:1023:1000::/home/foo:/bin/sh";
list($user,$pass,$uid,$gid,$gecos,$home,$shell)=explode(":",$data);
echo$user;//foo
echo$pass;//*
?>
⑥ 求php實現多個字元過濾功能
if(preg_match('/(詞1|詞2|詞3)+/', $string)){
return false;
}
⑦ php獲取指定內容後進行過濾
一般來說strip_tags作用就是去掉內容中的html標簽
你可以這樣
<?php
$content = strip_tags($content);
echo '<pre>';
echo $content;
echo '</pre>';
?>
你看看這些內容是否符合要求,如果不符合要求 就用str_replace函數替換,或者也可以用正則表達式,preg_replace替換
這樣處理後肯定就能達到你的目的
⑧ php關鍵詞攔截程序,攔截後怎麼知道哪個詞為非法片語
你把以下兩個文件改動下:
文件一、panan.php改動如下
/**
* 判斷文本中是否存在關鍵詞
*/
function filter_text($text, $badstring){
$filter = explode('|', $badstring);
foreach ($filter as $key) {
if(strpos($text, $key) !== false){
return $key;//這里將原來的true改為$key,目的是為了將違規的詞返回
}
}
return false;
}
文件三:index.php
<?php
require_once("panan.php");
require_once("filter.php");
$biaoti="如果包含此內容就不能通過!";
if($word = filter_text($biaoti, $badstring)){//改動:此處將filter_text方法的返回值賦值給$word
echo "對不起,你提交的內容包含「{$word}」文字不能發表,請刪除「{$word}」文字後再提交!";//將word值列印出來
exit();
}
?>
你將這兩個文件有注視的位置改下就行了。如果不行你可以加我網路hi,希望能幫到你。
⑨ php怎麼提取和過濾一段字元串裡面的內容
這些東西怎麼看起來想javascript乾的事情。當然php也可以干,對於php而言,所有的html代碼都一樣只是文本而已內,所以可以用容replace等函數替換就行。對於javascript而言這個是dom處理起來就靈活的多。
⑩ PHP中如何用正則表達式分離出某個關鍵詞前後的文字
<?php
$temp = 'www..com';
$str = '多謝專家!太詳細了!
「具體取關鍵詞左右的文字是什麼意思,是取該關鍵字前100個字,和該關鍵字後100個字碼」:是這樣的,就是取關鍵詞前、後各一百個字。
剩下的我仔細琢磨琢磨~
======www..com
另外,您的答案里的中文字,是按照GB碼來算的嗎?我看到操作字元串都是200~~那我要是用UTF8是不是就是300了?
=====
試了一下,截的還是有些問題...我這個問題不能用正則表達式直接截取嗎?也就是用正則表達式直接把關鍵字左右各N個字截過來~';
$str = mb_convert_encoding($str, "UTF-8", "GB2312");
preg_match_all("/(.{10}$temp.{10})/su", $str, $matches, PREG_SET_ORDER);
print_r($matches);
?>
這樣?樓上回答的不是很好么。。。呵呵