PHP中iconv函数字符串从GBK转换为UTF8字符集
1. iconv()介绍
iconv函数可以将一种已知的字符集文件转换成另一种已知的字符集文件。例如:从GB2312转换为UTF-8。
iconv函数在php教程5中内置,GB字符集默认打开。
2. iconv()错误
iconv在转换字符”—”到gb2312时会出错,解决方法是在需要转成的编码后加 “//IGNORE”,也就是iconv函数第二个参数后.如下:
iconv("UTF-8", "GB2312//IGNORE", $data)
ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符串都无法被保存。
3. iconv()例子
例1:
<?php
echo $str= ‘你好,这里是卖咖啡!’;
echo '<br />';
echo iconv('GB2312', 'UTF-8', $str); //将字符串的编码从GB2312转到UTF-8
echo '<br />';
echo iconv_substr($str, 1, 1, 'UTF-8'); //按字符个数截取而非字节
print_r(iconv_get_encoding()); //得到当前页面编码信息
echo iconv_strlen($str, 'UTF-8'); //得到设定编码的字符串长度
?>
例2:
如果你的PHP文件是UTF-8编码的,那么下面的代码就可以正确输出:
<?php
$str='我爱百度';
$utf='';
for ($i=0;$i<strlen($str);$i++) $utf.=sprintf("%%%02X",ord(substr($str,$i,1)));
echo $utf;
?>如果你的PHP文件是GB的,那么下面的代码可以工作:
<?php
$str='我爱百度';
$str=iconv("GBK", "UTF-8", $str);
$utf='';
for ($i=0;$i<strlen($str);$i++) $utf.=sprintf("%%%02X",ord(substr($str,$i,1)));
echo $utf;
?>以上情况下,程序输出的内容是:
%E6%88%91%E7%88%B1%E7%99%BE%E5%BA%A6
Mail Body的来源有时直接就是TextBox中的文本内容,但是如果对文本内容没有做处理的话,文本就会没有任何的格式,挤在一起,逐行显示。现在说的是如何让文本内容可以换行,然后不至于挤在一起。
单步调试时,会发现获取到的文本内容中,文本中的换行被替换成了"rn",因为一直没有发现这个,导致绕了很大的圈子。既然找到了这个原因的话,就可以将这个字符串替换成HTML的<br/>了。
ex:string strBody = Body.Replace("rn","<br/>");
虽然很easy,但当时不知道的时候确实很头疼,希望对你也会有用。
实例
<form id="form1" name="form1" method="post" action="">
<label>
<textarea name="t" id="t" cols="45" rows="5"></textarea>
</label>
<label>
<input type="submit" name="button" id="button" value="提交" />
</label>
</form>
<?php教程
if($_POST){
echo str_replace(chr(13),'<br>',$_POST['t']);
}
?>
更多详细内容请查看:http://www.111cn.net/phper/29/ff8b04e8f5b663b8b86d960321efcc83.htm
方法如下:
$arr = array(…………) ;//假设有一万个元素的数组,里面有重复的元素。
$arr = array_flip(array_flip($arr)); //这样便可以删除重复元素。
究竟是怎么回事呢?来看下array_flip()的作用:array_flip()用于将一个数组的每个元素的键和值交换,如:
$arr1 = array (”age” => 30, “name” => “快乐园”);
$arr2 = array_flip($arr1); //$arr2 就是 array(30 => “age”, “快乐园” => “name”);
在PHP的数组中,允许不同的元素可以取同一个值,但不允许同一个键名被不同的元素使用,如:
$arr1 = array (”age” => 30, “name” => “快乐园”, “age” => 20); “age” => 20将会取代”age” => 30
$arr1 = array (”name” => “快乐园”, “age” => 45);
这里 $arr1与$arr2 是相等的。
于是,我们便可以知道,为什么 array_flip(array_flip($arr)) 可以删除数组中重复的元素了。首先,$arr里的值会变成键名,因为值是有重复的,变成键名之后这些重复的值便成了重复的键名,PHP引擎将重复的键名删除,只保留最后一个。如:
$arr1 = array (”age” => 30, “name” => “快乐园”, “age” => 20);
$arr1 = array_flip($arr1); //$arr1 变成了 array(”快乐园” => “name”, 20 => “age”);
//再把 $arr1 的键名与值还复:
$arr1 = array_flip($arr1);
上面的代码写得简洁一些就是: $arr1 = array_flip(array_flip($arr1));
上面写了一篇关于数组去重的文章,但是仅限于一维数组。下面的函数可以用于二维数组:
复制代码 代码如下:
//二维数组去掉重复值
function array_unique_fb($array2D)
{
foreach ($array2D as $v)
{
$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[] = $v;
}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v)
{
$temp[$k] = explode(",",$v); //再将拆开的数组重新组装
}
return $temp;
}
如果你想保留数组的键值,可以用下面的函数:
复制代码 代码如下:
//二维数组去掉重复值 并保留键值
function array_unique_fb($array2D)
{
foreach ($array2D as $k=>$v)
{
$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[$k] = $v;
}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v)
{
$array=explode(",",$v); //再将拆开的数组重新组装
$temp2[$k]["id"] =$array[0];
$temp2[$k]["litpic"] =$array[1];
$temp2[$k]["title"] =$array[2];
$temp2[$k]["address"] =$array[3];
$temp2[$k]["starttime"] =$array[4];
$temp2[$k]["endtime"] =$array[5];
$temp2[$k]["classid"] =$array[6];
$temp2[$k]["ename"] =$array[7];
}
return $temp2;
}
大概就这样啦。
二维数组去重
复制代码 代码如下:
<?php教程
$arr = array(
array('id' => 1,'name' => 'aaa'),
array('id' => 2,'name' => 'bbb'),
array('id' => 3,'name' => 'ccc'),
array('id' => 4,'name' => 'ddd'),
array('id' => 5,'name' => 'ccc'),
array('id' => 6,'name' => 'aaa'),
array('id' => 7,'name' => 'bbb'),
);
function assoc_unique(&$arr, $key)
{
$rAr=array();
for($i=0;$i<count($arr);$i++)
{
if(!isset($rAr[$arr[$i][$key]]))
{
$rAr[$arr[$i][$key]]=$arr[$i];
}
}
$arr=array_values($rAr);
}
assoc_unique(&$arr,'name');
print_r($arr);
?>
利用php自带函数
说明
array array_unique ( array $array )
array_unique() 接受 array 作为输入并返回没有重复值的新数组。
注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
Note: 当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同。就是说,当字符串的表达一样时。第一个单元将被保留。
Example #1 array_unique() 例子
<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>
上例将输出:Array
(
[a] => green
[0] => red
[1] => blue
)
Example #2 array_unique() 和类型<?php
$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_dump($result);
?>
上例将输出:array(2) {
[0] => int(4)
[2] => string(1) "3"
}
相关教程
http://www.111cn.net/phper/php-function/34794.htm
语法: mixed preg_replace(mixed pattern, mixed replacement, mixed subject);
返回值: 混合类型资料
函数种类: 资料处理
内容说明: 本函数以 pattern 的规则来解析比对字符串 subject,欲取而代之的字符串为参数 replacement。返回值为混合类型资料,为取代后的字符串结果。
1. preg_replace()
$msg = preg_replace("/<style>.+</style>/is", "", $msg); -----删除<style></style>和中间的部分
$msg = preg_replace("/<[^>]+>/", "", $msg); -----是删除<>和中间的内容
i (PCRE_CASELESS)
如果设定此修正符,模式中的字符将同时匹配大小写字母。
s (PCRE_DOTALL)
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的,无论是否设定了此修正符。
2. ereg()与eregi()
注: preg_match() 函数通常是比 ereg() 更快的替代方案
eregi("<body([^>]+)>(.+)</body>",$data,$b)----察看$data中是否有body标签。如果有,把参数赋值$b[0],中间部分赋值$b[1]。
bool ereg ( string pattern, string string [, array regs] )
int eregi ( string pattern, string string, array [regs] )
eregi()和 ereg() 类似,用法也相同。不同之处在于ereg()有区分大小写,eregi()与大小写无关
<?php教程
//preg_replace()和ereg_replace()函数的使用的比较
// -------preg_replace()--------------------------
//1.进行字符串的查找的替换
$str = "daoyu shi ge hao hai zi 5555";
$pattern = "/s/"; //如果将变量定义为$pattern_1会出错
$str = preg_replace($pattern,'-',$str);
echo $str."<br>";
//2.对字符串的逆向引用
//方法一
$pat = "/(w+)-(w+)-(w+)-(w+)-(w+)-(w+)-(d+)/i";
$str =preg_replace($pat,"$1",$str);
echo $str."<br>";
//注意:如果是下面这种形式你会发现匹配的是:zi- 所以可以这样认为在有次数的{6}的情况下,他($1)匹配的是最后一次
$pat = "/((w+)-){6}(d+)/i";
$str =preg_replace($pat,"$1",$str);
echo $str."<br>";
//方法二
$str = "daoyu-shi-ge-hao-hai-zi-5555";
$pat = "/(w+)-(w+)-(w+)-(w+)-(w+)-(w+)-(d+)/i";
$str =preg_replace($pat,"1",$str);
echo $str."<br>";
//注意:当正则写成$pat= "/((w+)-){6}(d+)/i";时和上面的情况一样
PHP 获取文件扩展名的方法
PHP获取文件扩展名有很多种方法,下面提供其中的三种方法,大家可以研究下,具体就不解释了,直接给最终正确答案
echo pathinfo('/www/htdocs/your_image.jpg', PATHINFO_EXTENSION);
错误写法:
你可能会这样写
function get_file_extension($file_name) {
return substr(strrchr($file_name,'.'),1);
}
或这样写
function file_extension($filename) {
return end(explode(".", $filename));
}
顺便看下pathinfo 干些什么
<?php教程
$file_path = pathinfo('/www/htdocs/your_image.jpg');
echo "$file_path ['dirname']n";
echo "$file_path ['basename']n";
echo "$file_path ['extension']n";
echo "$file_path ['filename']n"; // only in PHP 5.2+
?>
以上将输出
/www/htdocs
your_image.jpg
jpg
your_image
,代码如下:
<?php
//方法一
function extend_1($file_name)
{
$retval="";
$pt=strrpos($file_name, ".");
if ($pt) $retval=substr($file_name, $pt+1, strlen($file_name) - $pt);
return ($retval);
}
//方法二
function extend_2($file_name)
{
$extend = pathinfo($file_name);
$extend = strtolower($extend["extension"]);
return $extend;
}
//方法三
function extend_3($file_name)
{
$extend =explode(".", $file_name);
$va=count($extend)-1;
return $extend[$va];
}
?>