1. 看到很多php的安全過濾函數,經常把一些字元給替換掉,那用戶輸入的信息改變了不是很不好嗎求解
正像你所說的,安全過濾,為了安全而限制用戶的行為是必須的,你想想這樣的限制針專對的是什麼屬用戶?是有意危害網站安全的用戶。舉幾個例子:
把標題中的html標簽過濾。因為標題一般都是純文本,1.html標簽會導致布局錯亂2.會包含危險script3.把引號等字元編碼為html實體並不會影響其最終顯示效果;
把正文中的<script>標簽過濾掉。因為普通用戶根本不會去執行script。所以我們一般有兩種做法:1.把script去掉,2.用html實體字元編碼標簽,這樣在顯示文章既可以顯示代碼段又不會執行代碼了;
過濾查詢參數的單引號。這是為了防止sql注入,一般有三種方法來實現:1.給引號添加反斜線2.去掉引號3.用sql的prepare動態綁定參數;
總之,不要信任任何的用戶輸入,限制還是為了更多的普通用戶更好的使用咱們的服務。
2. 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;//*
?>
3. 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);//輸出大家好 今天天氣真好啊 在幹麼啊 沒干什麼啊
演算法很簡單:
將原來的語句用空格分隔到數組,然後定義另外一個數組存放過濾後的片語,在循環式檢查當前字元串在第二個數組中是否存在,不存在則存放到第二個數組,最後函數返回第二個數組即可
4. PHP字元串過濾
可以用正則實現抄。給定字元串的規律是3冒號1分號中,前兩個冒號之前是數字,需要的是第三個冒號與分號之前的部分。可如下處理:
<?php
$string = "6939376:28407:包裝方式:包裝;5392114:75367881:重量(g):500;20000:7343430:品牌:蒙園;";
preg_match_all("/[^:\d]+:[^;]+;/", $string, $out);
$rst = implode("", $out[0]);
echo $rst;
?>
$rst為"包裝方式:包裝;重量(g):500;品牌:蒙園;"。已經測試是可行的(php5),如有問題歡迎繼續交流
5. 整理了php過濾字元串幾個例子
用正則表達式替換。
因為你沒有詳細說明,所以我無法給你演示,找一本正則表達式手冊回,如果你熟悉答php,應該很容易看懂,在php裡面有正則表達式的相關函數,比如替換/匹配都很方便。
以下是幾個例子:
正則表達式說明
/\b([a-z]+) \1\b/gi一個單詞連續出現的位置
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/將一個URL解析為協議、域、埠及相對路徑
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/定位章節的位置
/[-a-z]/A至z共26個字母再加一個-號。
/ter\b/可匹配chapter,而不能terminal
/\Bapt/可匹配chapter,而不能aptitude
/Windows(?=95 |98 |NT )/可匹配Windows95或Windows98或WindowsNT,當找到一個匹配後,從Windows後面開始進行下一次的檢索匹配。
6. 如:$id=xxxx php中關於ID如何嚴格過濾才進入SQL查詢啊用intval還是(int)還是其它要代碼啊
// intval 會將非int型的值轉為0, 將 332abc 這樣的字元串轉為332
$id = intval($_GET['id']);
if($id>0){
$sql = 'select * from user where id='.$id;
//或者
$sql = "select * from user where id=$id";
//注意 單引號版和雙引權號的區別
mysql_query($sql,$conn);
}
7. 【PHP】對一個變數的內容進行關鍵字過濾後再輸出~
這個闊以用 正則表達式 ,過濾其實 就是 條件截取
8. 求php實現多個字元過濾功能
if(preg_match('/(詞1|詞2|詞3)+/', $string)){
return false;
}
9. php 過濾低於4個字的片語
$str = "大家好 今天天氣好啊 在幹麼啊 沒干什麼啊"; //自定義字元串
$arr = explode(" ", $str); //根據空格拆分字元串到arr數組中。
foreach($arr as $val){ //循環數組,每次循環的val依次是"大家好","今天天氣好啊","在幹麼啊","沒干什麼啊"
//echo $val.'<br>'; //可以把這個注釋打開看看每個循環的字元串都是什麼
if(mb_strlen($val, 'UTF-8') > 4 ) //如果字元串長度大於4,注意第二個參數。看你頁面是什麼編碼,就填什麼
$rs .= $val . ' '; //如果長度大於4,就把這次循環的字元串拼到rs字元串里。並在後邊加個空格。
}
rtrim($rs, ' ');//去除最後結果rs最右邊的空格
echo $rs;
如有不明白的可以追問。樓下請勿復制並加註釋。因為我已經加上了。
10. 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,希望能幫到你。