首页 > 编程技术 > php

一个简单PHP验证邮箱合法性的函数

发布时间:2016-11-25 15:49

一个简单的php邮箱难函数,有需要的学习的朋友可参考本文章。

一个简单PHP验证邮箱合法性的函数,功能很全,记下备用。

 代码如下 复制代码
$mail = 'wan.ch_un0222@126.qq.com';
 
function vaildEmail($mail){
 
 //验证邮箱
 
 if (empty($mail) || !preg_match("/^[-a-zA-Z0-9_.]+@([0-9A-Za-z][0-9A-Za-z-]+.)+[A-Za-z]{2,5}$/",$mail)){
 
     return false;     
 
 }else{
 
     return true;
 
 }
 
}
php 网页生成word文档的实例程序 在需要的朋友可参考一下。

在这篇文章中主要解决两个问题:

1:在php中如何把html中的内容生成到word文档中

2:php把html中的内容生成到word文档中时,不居中显示问题,即会默认按照web视图进行显示。

3:php把html中的内容生成到word文档中时,相关样式不兼容问题

正文:

  

 代码如下 复制代码

echo '<html xmlns:o="urn:schemas-microsoft-com:office:office"  xmlns:w="urn:schemas-microsoft-com:office:word"  xmlns="http://www.w3.org/TR/REC-html40">
              <head>
                   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
                   <xml><w:WordDocument><w:View>Print</w:View></xml>
                   <script" width=100% src="includes/js/ztree/js/jquery-1.4.4.min.js" type="text/javascript"></script>
            </head>';

echo '<body><table class="table_dayin">
    <caption class="table_caption">';
    echo "数字化教学系统电子备课稿<br>
        <span>学科 <em style="border-bottom: 1px solid #545454;">语文</em>学校 <em style="border-bottom: 1px solid #545454;">实验中学</em></span>
    </caption>";
echo '</table></body></html>';

                ob_start(); //打开缓冲区
 header("Cache-Control: public");
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");

if (strpos($_SERVER["HTTP_USER_AGENT"],'MSIE')) {
  header('Content-Disposition: attachment; filename=test.doc');
  }else if (strpos($_SERVER["HTTP_USER_AGENT"],'Firefox')) {
  Header('Content-Disposition: attachment; filename=test.doc');
  } else {
  header('Content-Disposition: attachment; filename=test.doc');
  }
  header("Pragma:no-cache");
header("Expires:0");
ob_end_flush();//输出全部内容到浏览器

注:以上代码部分提供了在php程序文件中生成内容到word文档中并提供下载功能。

例子

 代码如下 复制代码

<?php
//初始化session
session_start();
// 包含数据库连接文件和头文件
?>
<html>
<head>
<title>试卷生成</title>
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<?
include('head.php');
require ('dbconnect.php');
?>
<?PHP
$juge=0;
for($i=1;($i<100);$i++)
{
$a=$i;
if(isset($_POST[$a]))
{
if($juge==0)
$sql.=" id=".$_POST[$a];
else
$sql.=" or id=".$_POST[$a];
$juge=1;
}
}
if($sql!="")
{
$sql="SELECT * FROM test WHERE".$sql;
$result_array=array(); //返回数组
$i=0; //数组下标
$query_result=@mysql_query($sql,$conn);
while($row=@mysql_fetch_object($query_result))
{
$i++;
$cout.=$i."&nbsp;&nbsp;";
$cout.="题目难度:".$row->difficulty."<br>";
$cout.="&nbsp;&nbsp;&nbsp;".$row->content."<br><br>";
}//while

?>
<?php
class word
{
function start()
{
ob_start();
print'<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">';
}

function save($path)
{

print "</html>";
$data = ob_get_contents();

ob_end_clean();
$this->wirtefile ($path,$data);
}
function wirtefile ($fn,$data)
{
$fp=fopen($fn,"wb");
fwrite($fp,$data);
fclose($fp);
}
}
/*-------word class End-------*/
$word=new word;
$word->start();
echo $cout;
$wordname="word/".time().".doc";
$word->save($wordname);//保存word并且结束.
?>
<div align="center"><a href="<?php echo $wordname ; ?>" target=_blank class="unnamed1">试卷已经生成,请点击这里查看</a>
<?PHP
}
else
{
?>
</div>
<div align="center"><span class="unnamed1">您输入的条件不足,请重新输入!</span>
<?PHP
}
?>
</div>
</html>

GBK简体字符集的编码是同时用1个字节和2个字节来表示的。当高位是0x00~0x7f时,为一个字节,高位为0x80以上时用2个字节表示

为了识别双字节的字符,比如汉字或日文韩文等都是占两字节的,每字节高位为1,而一般西文字符只有一个字节,七位有效编码,高位为0
而0x80对应的二进制代码为1000 0000,最高位为一,代表汉字.汉字编码格式通称为10格式. 一个汉字占2字节,但只代表一个字符

GBK简体字符集的编码是同时用1个字节和2个字节来表示的。当高位是0x00~0x7f时,为一个字节,高位为0x80以上时用2个字节表示"

注:括号里面都是2进制
当你发现一个字节的内容大于0x7f,那它肯定是个(跟另外一个字节拼凑成一个)汉字,如何判断肯定大于0x7f呢?
0x7f(1111111)后面一个数就是0x80(10000000),所以想要大于0x7f,这个字节的最高位都肯定是1,我们只需要判断这个最高位是否为1就行了。

判断方法:
位与(相同的位都是1的才为1,否则为0):
如:要判断一个数的第三位是否是1,只要跟4(100)位与,判断一个数的第2位是否为1就跟2(10)位与.
同理判断第八位是否为1只要跟(10000000)也就是0x80位与了.

这里为什么不用>0x7f,php可能还行,但在其他强类型语言里面,1个字节的最高位用来标示负数,一个负数肯定不可能大于0x7f(最大的整数)

再举个例子:

 代码如下 复制代码

a的assic码是97(1100001)
A的assic码是65(1000001)

b的assic码是98(1100010)
b的assic码是66(1000010)

发现一个规律:一个a-z的字母,只要是小写字母,第六位肯定是1,我们可以用这个来判断大小写:
这时候只要跟用以个字母跟0x20(100000)来位与判断:

 代码如下 复制代码
if(ord($a)&0x20){
        //大写
}

如何把所有字母改成大写?第六位的1改成0就行了:

 代码如下 复制代码
$a='a';
$a        = chr(ord($a)&(~0x20));
echo $a;
本文章介绍了一段关于不用递归实现php树程序代码,有需要的朋友可参考一下。
 代码如下 复制代码

/**
 * 创建父节点树形数组
 * 参数
 * $ar 数组,邻接列表方式组织的数据
 * $id 数组中作为主键的下标或关联键名
 * $pid 数组中作为父键的下标或关联键名
 * 返回 多维数组
 **/
function find_parent($ar, $id='id', $pid='pid') {
  foreach($ar as $v) $t[$v[$id]] = $v;
  foreach ($t as $k => $item){
    if( $item[$pid] ){
      if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) )
         $t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]];
    }
  }
  return $t;
}


/**
 * 创建子节点树形数组
 * 参数
 * $ar 数组,邻接列表方式组织的数据
 * $id 数组中作为主键的下标或关联键名
 * $pid 数组中作为父键的下标或关联键名
 * 返回 多维数组
 **/
function find_child($ar, $id='id', $pid='pid') {
  foreach($ar as $v) $t[$v[$id]] = $v;
  foreach ($t as $k => $item){
    if( $item[$pid] ) {
      $t[$item[$pid]]['child'][$item[$id]] =& $t[$k];
    }
  }
  return $t;
}

    $data = array(
      array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
      array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),
      array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
      array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),
      array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),
    );

    $p = find_parent($data, 'ID', 'PARENT');
    $c = find_child($data, 'ID', 'PARENT');
    Print_r ($c);

结果

 代码如下 复制代码

Array
(
    [1] => Array
        (
            [ID] => 1
            [PARENT] => 0
            [NAME] => 祖父
            [child] => Array
                (
                    [2] => Array
                        (
                            [ID] => 2
                            [PARENT] => 1
                            [NAME] => 父亲
                            [child] => Array
                                (
                                    [4] => Array
                                        (
                                            [ID] => 4
                                            [PARENT] => 2
                                            [NAME] => 自己
                                            [child] => Array
                                                (
                                                    [5] => Array
                                                        (
                                                            [ID] => 5
                                                            [PARENT] => 4
                                                            [NAME] => 儿子
                                                        )

                                                )

                                        )

                                )

                        )

                    [3] => Array
                        (
                            [ID] => 3
                            [PARENT] => 1
                            [NAME] => 叔伯
                        )

                )

        )

    [2] => Array
        (
            [ID] => 2
            [PARENT] => 1
            [NAME] => 父亲
            [child] => Array
                (
                    [4] => Array
                        (
                            [ID] => 4
                            [PARENT] => 2
                            [NAME] => 自己
                            [child] => Array
                                (
                                    [5] => Array
                                        (
                                            [ID] => 5
                                            [PARENT] => 4
                                            [NAME] => 儿子
                                        )

                                )

                        )

                )

        )

    [3] => Array
        (
            [ID] => 3
            [PARENT] => 1
            [NAME] => 叔伯
        )

    [4] => Array
        (
            [ID] => 4
            [PARENT] => 2
            [NAME] => 自己
            [child] => Array
                (
                    [5] => Array
                        (
                            [ID] => 5
                            [PARENT] => 4
                            [NAME] => 儿子
                        )

                )

        )

    [5] => Array
        (
            [ID] => 5
            [PARENT] => 4
            [NAME] => 儿子
        )

)

网上下载的IP地址数据库中的IP地址并非是我们常见的格式(61.175.232.30),而是这种(1034938398)类型的数据,看起来这两个数据好像没有关连,很复杂,其实并不复杂

,以“61.175.232.30”这个IP地址为例,IP地址转换成数字串方法如下:先将“61.175.232.30”转换为十六进制“3d.af.e8.1e”,然后去掉小数点后,变为“3dafe81e”,最后将这个十六进制数转换为十进制“1034938398”,那么“61.175.232.30”就变为“1034938398”了。


方法一:

 代码如下 复制代码

public function ipToLong(){
        $ip = $_SERVER['REMOTE_ADDR'];
        $ip = explode('.', $ip);
        $ip = array_reverse($ip);//数组反转
        $r = 0;
        for($i=0,$j=count($ip); $i<$j; $i++){
            $r += $ip[$i] * pow(256, $i);
        }
        $r = sprintf("%u", $r);
        echo $r;
}

方法二:

 代码如下 复制代码

public function ipToLong(){
        $ip = $_SERVER['REMOTE_ADDR'];
        $ip = explode('.',$ip);
        $r = ($ip[0] << 24) | ($ip[1] << 16) | ($ip[2] << 8) | $ip[3];
        if($r < 0) $r += 4294967296;
        echo $r ;
}

经测试本地的ip是:192.168.1.101,两个方法转换结果是3232235877

ping 192.168.1.101 和 ping 3232235877是一样的。


下面提供用C#实现IP地址转换的代码:

代码

    

 代码如下 复制代码

   //IP地址
       string Ip = "61.175.232.30";
       //取出IP地址去掉‘.’后的string数组
       string [] Ip_List = Ip.Split (".".ToCharArray ());
       string X_Ip = "";
       //循环数组,把数据转换成十六进制数,并合并数组(3dafe81e)
       foreach(string ip in Ip_List)
       {
               X_Ip += Convert.ToInt16 (ip).ToString ("x");
       }

       //将十六进制数转换成十进制数(1034938398)
       long N_Ip = long.Parse (X_Ip, System.Globalization.NumberStyles.HexNumber);

      OK,就这样转换成功了,不信,你可以用windows的命令行工具测试一下,ping 61.175.232.30 和 ping 1034938398 的效果是一样的,都是指向 61.175.232.30 的。

标签:[!--infotagslink--]

您可能感兴趣的文章: