您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“PHP留言本模塊主要功能是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
一,敏感詞處理
1,過濾敏感詞
preg_match()函數(shù)用來在字符串中搜索所有與給定的正則表達(dá)式匹配的內(nèi)容,如果存在則返回True,否則返回False。
語法:
int preg_match(string pattern,string subject[,array matches[,int flags]])
preg_match()函數(shù)參數(shù)說明如下:
pattern:必要參數(shù),需要匹配的正則表達(dá)式
subject:必要參數(shù),輸入的字符串
matches:可選參數(shù)。輸出搜索結(jié)果的數(shù)組,例如$out[0]將包含與整個模式匹配的結(jié)果,$out[1]將包含與第一個捕獲的括號中的子模式所匹配的結(jié)果,一次類推
flags:可選參數(shù)。標(biāo)記:PREG_OFFSET_CAPTURE,對每個出現(xiàn)的匹配結(jié)果頁同時返回其附屬的字符串偏移量,PHP4.3.0后可用。
具體實現(xiàn)方法如下:
首先,應(yīng)用file()函數(shù)讀取存儲子文本文件中的敏感詞匯(每個敏感詞獨立成一行),并將共存儲在數(shù)組$file_word中。
然后,應(yīng)用for循環(huán)語句自動讀取數(shù)組元素(敏感詞),直接通過正則表達(dá)式檢驗用戶提交的留言信息是否含有敏感詞。
當(dāng)用戶發(fā)表留言信息后,提交李艷信息時,將留言信息與存儲在數(shù)組中的敏感詞進(jìn)行對比,如果留言信息中含有敏感詞,那么將彈出提示信息,否則留言信息發(fā)布成功。實現(xiàn)敏感詞過濾關(guān)鍵代碼如下:
復(fù)制代碼 代碼如下:
if (is_file("./filterwords.txt")){ //判斷給定文件名是否為一個正常的文件
$filter_word = file("filterwords.txt"); //把整個文件讀入一個數(shù)組中
$str=$_POST['content'];
for($i=0;$i<count($filter_word);$i++){ //應(yīng)用For循環(huán)語句對敏感詞進(jìn)行判斷
if(preg_match("/".trim($filter_word[$i])."/i",$str)){ //應(yīng)用正則表達(dá)式,判斷傳遞的留言信息中是否含有敏感詞
echo "<script> alert('留言信息中包含敏感詞!');history.back(-1);</script>";
exit;
}
}
}
file()函數(shù)
array file (string filename [, int use_include_path [, resource context]])
和readfile()一樣,只除了file()將文件作為一個數(shù)組返回。數(shù)組中的每個單元都是文件中相應(yīng)的一行,包括換行符在內(nèi)。如果失敗file()返回FALSE。
2,添加敏感詞到文本文件
php向文本文件中寫入敏感詞匯應(yīng)用的主要函數(shù)
(1)is_writable()函數(shù)
is_writable()函數(shù)用于判斷某文件是否存在,并且是否可寫,如果滿足上述條件則返回True,否則返回False。
語法:bool is_writable(string filename)參數(shù)filename用于指定文件的完整路徑(c:/leaveMessage/filterwords.txt)或相對路徑(相對應(yīng)調(diào)用文件路徑filterwords.txt),可寫返回true,不可寫返回false
示例:
復(fù)制代碼 代碼如下:
if(is_writable("filterwords.txt")){
echo "可寫文件";
} else {
echo "不可寫文件";
}
(2)fopen()函數(shù)
fopen()函數(shù)用于打開某文件,并返回該文件的標(biāo)示指針。該文件可以是本地的也可以是遠(yuǎn)程的。
語法:resource fopen(string filename,string mode[,int use_include_path[,resource context]])
參數(shù):
filename:必要參數(shù)。用于指定要打開文件的本地或遠(yuǎn)程地址
mode:必要參數(shù)。用于指定要打開文件的模式use_include_path:可選參數(shù)。如果將該參數(shù)設(shè)置為True,PHP會嘗試按照include_path標(biāo)準(zhǔn)包含路徑中的每個指向去打開文件
context:可選參數(shù)。設(shè)置提高文件流性能的一些選項
mode文件打開模式參數(shù)說明:
'r' 只讀方式打開,將文件指針指向文件頭。
'r+' 讀寫方式打開,將文件指針指向文件頭。
'w' 寫入方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建之。
'w+' 讀寫方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建之。
'a' 寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之。
'a+' 讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之。 'x'創(chuàng)建并以寫入方式打開,將文件指針指向文件頭。如果文件已存在,則fopen()調(diào)用失敗并返回FALSE,并生成一條E_WARNING級別的錯誤信息。如果文件不存在則嘗試創(chuàng)建之。這和給底層的open(2)系統(tǒng)調(diào)用指定O_EXCL|O_CREAT標(biāo)記是等價的。此選項被PHP4.3.2 以及以后的版本所支持,僅能用于本地文件。'x+'創(chuàng)建并以讀寫方式打開,將文件指針指向文件頭。如果文件已存在,則fopen()調(diào)用失敗并返回FALSE,并生成一條E_WARNING級別的錯誤信息。如果文件不存在則嘗試創(chuàng)建之。這和給 底層的 open(2) 系統(tǒng)調(diào)用指定 O_EXCL|O_CREAT 標(biāo)記是等價的。此選項被 PHP 4.3.2 以及以后的版本所支持,僅能用于本地文件。
示例:fopen()函數(shù)以只讀方式打開文件
復(fù)制代碼 代碼如下:
<?php
$fp=fopen("filterwords.txt","r");
?>
(3)fseek()函數(shù)
fseek()函數(shù)用于設(shè)置文件指針的位置
語法:int fseek(resource handle,int offset[,int whence])
參數(shù):
handle:必要參數(shù)。打開某文件后返回的文件標(biāo)識
offset:必要參數(shù)。用于設(shè)定文件指針的位置
whence:可省參數(shù)。
fessk()函數(shù)的whence參數(shù)說明
seek_set:設(shè)置位置等于offset個字節(jié)。該值為該參數(shù)的默認(rèn)值
seek_cur:設(shè)置位置等于當(dāng)前位置加上offset個字節(jié)
seek_end:設(shè)置位置等于文件尾加上offset個字節(jié)
例如,應(yīng)用fopen()函數(shù)打開文件“test.txt”,然后讀取該文件4096個字節(jié)的內(nèi)容,最后應(yīng)用fseek()函數(shù)將文件指針恢復(fù)到原位置。
復(fù)制代碼 代碼如下:
<?php
$fp=fopen("filterwords.txt","r"); //以只讀方式打開某文件
$data=fgets($fp,4096); //讀取文件中一行4096個字節(jié)的內(nèi)容
fseek($fp,0); //使文件指針指向第0個字節(jié)的位置
?>
string fgets(int handle[,int length])
從handle指向的文件中讀取一行并返回長度最多為length - 1字節(jié)的字符串。碰到換行符(包括在返回值中)、EOF或者已經(jīng)讀取了length- 1字節(jié)后停止(看先碰到那一種情況)。如果沒有指定length,則默認(rèn)為1K,或者說1024字節(jié)。(考慮到程序執(zhí)行效率,一般還是選用某一固定長度值)
(4)fwrite()函數(shù)
fwrite()函數(shù)用于將字符串寫入指定的文件中,并可以規(guī)定寫入字節(jié)的大小。
語法:int fwrite(resource handle,string string[,int length])
參數(shù)說明:
handle:必要參數(shù)。文件標(biāo)識指針
string:必要參數(shù)。要寫入某文件的字符串
length:可省參數(shù)。指寫入文件的長度,如果省略該參數(shù)則將指定字符串的所有內(nèi)容寫入文件中
例如:fwrite()函數(shù)將字符串“PHP留言本”寫入filterwords.txt文件中
復(fù)制代碼 代碼如下:
<?php
$fp=fopen("filterwords.txt","w+");
$str="PHP留言本";
if(fwrite($fp,$str)){
echo "文件寫入成功!";
}else{
echo "文件寫入失敗";
}
?>
(5)fclose()函數(shù)
fclose()函數(shù)用于關(guān)閉指定的文件標(biāo)識所指的文件。
語法:bool fclose(resource handle)
參數(shù)handle為fopen()函數(shù)或fsockopen()函數(shù)成功打開某文件后所返回的文件標(biāo)識。
在留言本模塊中,通過以上介紹的函數(shù)實向文本文件“filterwords.txt”中添加敏感詞的功能。
復(fù)制代碼 代碼如下:
<?php
if($_POST){
$filename="../filterwords.txt";
if(is_writable($filename)){
$file=fopen($filename,'r+'); //讀寫方式打開,將文件指針指向文件頭。
}
else{
echo "文件".$filename."不可寫";
}
//在文件尾寫文件
fseek($file,0,SEEK_END); //設(shè)置指針位置,SEEK_END設(shè)置位置等于文件尾加上offset(這里為零)個字節(jié)
$word=$_POST[txt_word];
fwrite($file,$word);
fwrite($file,"\r\n");
fclose($file);
}
?>
3,讀取文件中的敏感詞
復(fù)制代碼 代碼如下:
<?php
$filename="../filterwords.txt";
if(is_readable($filename)){
$arr=file($filename);
}
else{
echo "文件".$filename."不可讀";
}
while(list($name,$value)=each($arr)){ //遍歷數(shù)組
$a.="$value".",";
}
echo "<br>敏感詞如下:<br>".$a;
?>
(1)is_readable()判斷文件是否存在,并且是否可讀,如果滿足上述條件則返回True
語法:bool is_readable(string filename),參數(shù)filename用于指定文件的完整路徑
(2)void list(mixed...)
像array()一樣,這不算真正的函數(shù),而是語言結(jié)構(gòu)。list()用一步操作給一組變量進(jìn)行賦值。list()僅能用于數(shù)字索引的數(shù)組并假定數(shù)字索引從0開始.
例如:
復(fù)制代碼 代碼如下:
<?php
$info = array('coffee', 'brown', 'caffeine');
list($drink, $color, $power) = $info;
print "$drink is $color and $power makes it special.\n";
//coffee is brown and caffeine makes it special.
list($drink, $color) = $info;
print "$drink is $color.\n";
//coffee is brown.
?>
(3)array each(array array)
返回array數(shù)組中當(dāng)前指針位置的鍵和值,并向前移動數(shù)組指針。鍵值對被返回為四個單元的數(shù)組,鍵名為0,1,key和value.單元0和key包含數(shù)組單元的鍵名,1和value包含有數(shù)據(jù)。如果內(nèi)部指針越過了數(shù)組的末端,則each()返回FALSE。
復(fù)制代碼 代碼如下:
<?php
$foo = array ("bob", "fred", "jussi", "jouni", "egon", "marliese");
$bar = each($foo);
print_r($bar);
?>
each()返回數(shù)組如下
Array
{
[1] => bob
[value] => bob
[0] => 0
[key] => 0
}
list()僅對數(shù)字索引起作用,而且默認(rèn)鍵從零開始。所以list($name,$value)將鍵0和值bob分別賦值給$name和$value.
4,實現(xiàn)復(fù)選框的全選和反選
根據(jù)數(shù)據(jù)庫中的內(nèi)容應(yīng)用for循環(huán)語句動態(tài)創(chuàng)建復(fù)選框的個數(shù),被全選或反選的復(fù)選框必須設(shè)置name為note_id[],復(fù)選框的值是留言信息的ID號。
<input type="checkbox" name="note_id[]" value="<?php echo $id;?>" />
添加一個全選的復(fù)選框,作為要選擇的內(nèi)容。當(dāng)勾選該復(fù)選框時,調(diào)用自定義函數(shù)check_all()函數(shù)來設(shè)置復(fù)選框的全選。
<input type="checkbox" name="select_all" onClick="check_all(this.form)" />
<span class="style1">全選</span>
全選的實現(xiàn),遍歷所有的復(fù)選框form.elements[i],然后設(shè)置各多選項的checked屬性為True。
反選的實現(xiàn),遍歷所有復(fù)選框form.elements[i],獲取復(fù)選框的checked屬性值,如果是True,則設(shè)置為False,否則設(shè)為True,即作為當(dāng)前值的相反設(shè)置。
復(fù)制代碼 代碼如下:
<script language="JavaScript">
//反選表單中checkbox
function inverse(form){
for (var i=0;i<form.elements.length-2;i++){
//form.elements.length獲取頁面表單input元素的個數(shù),例如checkbox,radio,text,button,submit等
var e = form.elements[i];
e.checked == true ? e.checked = false : e.checked = true;
}
}
//選擇表單中所有check_box
function check_all(form){
for(var i=0;i<form.elements.length-2;i++){
var e=form.elements[i];
e.checked=true;
}
}
</script>
二,留言本代碼分析
1,substr()截取中文字符串問題
函數(shù):string substr(string string, int start, int [length]);
參數(shù)說明:
string:必須,表示要處理的字符串
start:必須,表示從string字符串的第start位開始取,若start為負(fù)數(shù),則從字符串尾端算起
length:可選,表示要取的字符串長度,若length為負(fù)數(shù),則表示取到倒數(shù)第length個字符
中文字符占兩個長度,英文字符和符號占一個長度。php內(nèi)置函數(shù)substr(string str,intstart,[int length])是用來截取指定字符串長度的。在截取英文字符串時沒問題,但是在截取中文或者是中英文混合的字符串中,就會出現(xiàn)最后一個字符變成問號的問題。
下面則是自定義的中文字符串截取函數(shù):
復(fù)制代碼 代碼如下:
function str_cut($str,$start,$length){ //中文字符串截取函數(shù)
$str_new=iconv_substr($str,$start,$length,"utf-8");
if($start==0){
if(strlen(utf8_decode($str))>($length+$start)){
$str_new.=".";
}
}
return $str_new;
}
2,htmlspecialchars()函數(shù)把一些預(yù)定義的字符轉(zhuǎn)換為HTML實體。函數(shù)都是防止用戶的非法操作的。
例如:
復(fù)制代碼 代碼如下:
$str='<div>我添加的半個層</div></td>半個表格行標(biāo)記<br/><a href="<a href="https://www.jb51.net/">https://www.jb51.net</a>">億速云</a>';
echo htmlspecialchars($str);
輸出的是:
<div>我添加的半個層</div></td>半個表格行標(biāo)記<br/><a href="<a href="https://www.jb51.net/">https://www.jb51.net</a>">億速云</a>
3,str_replace()函數(shù)使用一個字符串替換字符串中的另一些字符.
語法:str_replace(find,replace,string,count)
參數(shù)說明:
find:必須。規(guī)定要查找的值。
replace:必須。規(guī)定替換find內(nèi)容的值
string:必須。規(guī)定被搜索的字符串
count:可選。一個變量,對替換數(shù)進(jìn)行計數(shù)
“PHP留言本模塊主要功能是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。