crypt.php
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 244 行
PHP
244 行
<?php //// +----------------------------------------------------------------------+// | PHP Version 4 |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2002 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/2_02.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Authors: Michael Dransfield <mike@blueroot.net> |// +----------------------------------------------------------------------+//// $Id$/** * PEAR::HTML_Crypt * * The PEAR::HTML_Crypt provides methods to encrypt text, which * can be later be decrypted using JavaScript on the client side * * This is very useful to prevent spam robots collecting email * addresses from your site, included is a method to add mailto * links to the text being generated * * a basic example to encrypt an email address * $c = new HTML_Crypt('yourname@emailaddress.com', 8); * $c->addMailTo(); * $c->output(); * * @author Michael Dransfield <mike@blueroot.net> * @package HTML_Crypt * @version $Revision: 1.2.1 $ */class HTML_Crypt{ // {{{ properties /** * The unencrypted text * * @access public * @var string * @see setText() */ var $text = ''; /** * The full javascript to be sent to the browser * * @access public * @var string * @see getScript() */ var $script = ''; /** * The text encrypted - without any js * * @access public * @var string * @see cyrptText */ var $cryptString = ''; /** * The number to offset the text by * * @access public * @var int */ var $offset; /** * Whether or not to use JS for encryption or simple html * * @access public * @var int */ var $useJS; /** * a preg expression for an <a href=mailto: ... tag * * @access public * @var string */ var $apreg; /** * a preg expression for an email * * @access public * @var string */ var $emailpreg; // }}} // {{{ HTML_Crypt() /** * Constructor * * @access public * @param string $text The text to encrypt * @param int $offset The offset used to encrypt/decrypt */ function HTML_Crypt($text = '', $offset = 3, $JS = true) { $this->offset = $offset; $this->text = $text; $this->script = ''; $this->useJS = $JS; $this->emailpreg = '[-_a-z0-9]+(\.[-_a-z0-9]+)*@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]{2,6}'; $this->apreg = '\<[aA]\shref=[\"\']mailto:.*\<\/[aA]\>'; } // }}} // {{{ setText() /** * Set name of the current realm * * @access public * @param string $text The text to be encrypted */ function setText($text) { $this->text = $text; } // }}} // {{{ addMailTo() /** * Turns the text into a mailto link (make sure * the text only contains an email) * * @access public */ function addMailTo() { $email = $this->text; $this->text = '<a href="mailto:'.$email.'">'.$email.'</a>'; } // }}} // {{{ cryptText() /** * Encrypts the text * * @access private */ function cryptText() { $enc_string = ''; $length = strlen($this->text); for ($i=0; $i < $length; $i++) { $current_chr = substr($this->text, $i, 1); $inter = ord($current_chr)+$this->offset; $enc_char = chr($inter); $enc_string .= ($enc_char == '\\' ? '\\\\' : $enc_char); } $this->cryptString = $enc_string; } // }}} // {{{ getScript() /** * Returns the script html source including the function to decrypt it * * @access public * @return string $script The javascript generated */ function getScript() { if ($this->cryptString == '' && $this->text != '') { $this->cryptText(); } // get a random string to use as a function name srand((float) microtime() * 10000000); $letters = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'); $rnd = $letters[array_rand($letters)] . md5(time()); // the actual js (in one line to confuse) $script = "<script language=\"JavaScript\" type=\"text/JavaScript\">var a,s,n;function $rnd(s){r='';for(i=0;i<s.length;i++){n=s.charCodeAt(i);if(n>=8364){n=128;}r+=String.fromCharCode(n-".$this->offset.");}return r;}a='".$this->cryptString."';document.write ($rnd(a));</script>"; $this->script = $script; return $script; } // }}} // {{{ output() /** * Outputs the full JS to the browser * * @access public */ function output() { if ($this->useJS) { if ($this->script == '') { $this->getScript(); } echo $this->script; } else { echo str_replace(array('@', '.'), array(' ^at^ ', '-dot-'), $this->text); } } function obStart() { ob_start(); } function obEnd() { $text = ob_get_contents(); $text = preg_replace_callback("/{$this->apreg}/", array($this, '_fly'), $text); ob_end_clean(); echo $text; } function _fly($text) { $c = new HTML_Crypt($text[0]); $c->setText($text[0]); return $c->getScript(); }}?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?