1. 如何使用php批量去除文件UTF8 BOM信息
原理:
UTF8文件,微軟為了增加一個識別信息,有了BOM這個東西:BOM —— Byte Order Mark,預設在Windows等平台上編輯的UTF8文件會在頭部增加3個位元組的標記信息,我們PHP引擎在處理的時候會完整讀取整個PHP代碼文檔, 如果PHP文件頭部包含BOM信息,就會輸出一個空白,在很多時候會帶來問題,比如我們session無法工作、cookie無法設置等等問題。
解決方法:
把頭部BOM的3個位元組信息識別出來,然後剔除掉。不過一般情況我們不知道哪個文件有BOM,或者是有很多文件,這個時候,就需要進行批量處理了,下面代碼主要就是展現了批量處理的情況,應該會對大家工作中有幫助。
執行方法:
設置一個路徑,然後直接執行就行。
復制代碼 代碼如下:
<?php
// 設定你要清除BOM的根目錄(會自動掃描所有子目錄和文件)
$HOME = dirname(__FILE__);
// 如果是Windows系統,修改為:$WIN = 1;
$WIN = 0;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>UTF8 BOM 清除器</title>
<style>
body { font-size: 10px; font-family: Arial, Helvetica, sans-serif; background: #FFF; color: #000; }
.FOUND { color: #F30; font-size: 14px; font-weight: bold; }
</style>
</head>
<body>
<?php
$BOMBED = array();
RecursiveFolder($HOME);
echo '<h2>These files had UTF8 BOM, but i cleaned them:</h2><p class="FOUND">';
foreach ($BOMBED as $utf) { echo $utf ."<br />n"; }
echo '</p>';
// 遞歸掃描
function RecursiveFolder($sHOME) {
global $BOMBED, $WIN;
$win32 = ($WIN == 1) ? "" : "/";
$folder = dir($sHOME);
$foundfolders = array();
while ($file = $folder->read()) {
if($file != "." and $file != "..") {
if(filetype($sHOME . $win32 . $file) == "dir"){
$foundfolders[count($foundfolders)] = $sHOME . $win32 . $file;
} else {
$content = file_get_contents($sHOME . $win32 . $file);
$BOM = SearchBOM($content);
if ($BOM) {
$BOMBED[count($BOMBED)] = $sHOME . $win32 . $file;
// 移出BOM信息
$content = substr($content,3);
// 寫回到原始文件
file_put_contents($sHOME . $win32 . $file, $content);
}
}
}
}
$folder->close();
if(count($foundfolders) > 0) {
foreach ($foundfolders as $folder) {
RecursiveFolder($folder, $win32);
}
}
}
// 搜索當前文件是否有BOM
function SearchBOM($string) {
if(substr($string,0,3) == pack("CCC",0xef,0xbb,0xbf)) return true;
return false;
}
?>
</body>
</html>
望採納。
2. php 如何判斷字元是否是utf8編碼
嚴格來說,不好判斷,但如下方法或許能給你應急處理。 function is_utf8_encode($str, $flag=false){ static $charset = null; if($charset == null){ //gbk中的漢字,但是滿足utf-8的編碼規范,對於這些漢字當做gbk字元處理 $charstr = '隴摟簍擄鹵路脳脿謾貓茅錨矛鉚貌貿梅霉煤眉膩膿臎墨艅艌艒奴菐菒菕菙菛菢菤菧蓱傘藝藟藠藡藱螒螔螕螖螘螙螚螛螜螝螞螠螡螢螣螤巍危韋違桅圍唯惟偽尾緯未蔚味畏胃喂魏位渭謂尉慰蟺蟻蟽蟿蠀蠁蠂蠄蠅衼袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖嘯笑效楔些歇蠍鞋協挾攜邪斜脅諧寫械卸蟹懈泄瀉謝屑薪芯鋅褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟褢'; $charset = str_split($charstr, 2); $charset = array_flip($charset);}$pflag = true;$qflag = false; $len = strlen($str);
3. 用phpstr_replace() 如何替換utf8頁面的中文,調用的頁面是UTF8
首先保證str_replace時編碼程序與調用的頁面代碼一致,比如程序文件的編碼為UTF8,調用頁面的編碼也是UTF8,這樣在程序代碼中就可以直接使用中文了。
str_replace('哈哈','呵呵',$buffer)
4. php讀取文件時多了個%ufeff,怎樣去掉
這是一個文件BOM頭,是用來聲明UTF-8的,
做法有兩種,
1、那個文件在保存的時候選擇UTF-8無BOM,或者一些編輯器做去除BOM處理。
2、就是通過PHP,過濾掉BOM。
5. 如何使用PHP批量去除文件UTF8 BOM信息
使用PHP批量去除文件UTF8 BOM信息的方法是移除特定的utf-8 bom文件頭。
1、找到\xef\xbb\xbf後並做移除
2、全部參考代碼如下:
<?php//RemovesBOM(Byteordermark)fromfile(ifnecessary)functionbomStrip(path,output){
$bufsize=65536;
$utf8bom="\xef\xbb\xbf";
$inf=fopen(path,r);
$outf=fopen(output,w);
$buf=fread($inf,strlen($utf8bom)); if($buf!=$utf8bom)
{
fwrite($outf,$buf);
} if($buf=="")
{ exit();
} while(true)
{
$buf=fread($inf,$bufsize); if($buf=="")
{ exit();
}
fwrite($outf,$buf);
}
}?>
6. PHP中如何過濾掉非漢字字元
首先需要先把帶有中文的字元串進行編碼轉化,由GB2312編碼轉化為UTF-8編碼。
這樣是為了PHP正則表達式可以正確的去匹配
然後通過preg_match_all()函數以及相應的中文匹配正則表達式,把所有的中文匹配出來
最後,把匹配到的中文字元串再轉為B2312編碼,這樣做是為了可以在網頁編碼為GB2312上正確顯示。
例如:
<?php
$str = "ddddvvv(,中文.)dfdsfds字元啊.";
//把GB2312編碼轉化為 UTF-8編碼
$str = mb_convert_encoding($str, 'UTF-8', 'GB2312');
//正則匹配
preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str, $matches);
//把匹配到的數組連接為字元串
$str = implode('', $matches[0]);
//把UTF-8編碼轉化為 GB2312編碼
$str = mb_convert_encoding($str, 'GB2312', 'UTF-8');
echo $str;
//輸出 中文字元啊
?>
7. php怎樣過濾掉特殊字元啊 ☺
過濾掉特殊字元,可以考慮使用字元串替換的方法,在php中替換字元效率最高也是最簡單字元替換函數str_replace函數。
使用方法:str_replace(find,replace,string,count)
參數說明:
find 必需。規定要查找的值。
replace 必需。規定替換 find 中的值的值。
string 必需。規定被搜索的字元串。
count 可選。一個變數,對替換數進行計數。
實例:
str_replace("iwind","kiki","iloveiwind,iwindsaid");
將輸出 "i love kiki, kiki said"
當然你也可以採取正則替換的方法,該函數是preg_replace
8. PHP過濾問題 preg_match("/^[0-9a-zA-Z]*$/",$str)
preg_match("/^[0-9a-zA-Z]*$/",$str)
這個/^[0-9a-zA-Z]*$/正則,匹配的string必須有0-9z-aA-Z組成,你加了定位符,所以不能含有其他字元;
如果你只是想判斷string裡面有沒有字母和數字,
可以去掉定位符preg_match("/[0-9a-zA-Z]*/",$str)
9. php怎麼解析utf-8帶BOM編碼的json數據,php解析json數據返回NULL
son_decode函數能夠接收utf8編碼的參數,但是當參數中包含BOM時,json_decode就會失效。
這個函數能將給定的字元串轉換成UTF-8編碼,移除其中的BOM。
下面是PHP代碼:
function prepareJSON($input) {
//This will convert ASCII/ISO-8859-1 to UTF-8.
//Be careful with the third parameter (encoding detect list), because
//if set wrong, some input encodings will get garbled (including UTF-8!)
$imput = mb_convert_encoding($input, 'UTF-8', 'ASCII,UTF-8,ISO-8859-1');
//Remove UTF-8 BOM if present, json_decode() does not like it.
if(substr($input, 0, 3) == pack("CCC", 0xEF,