替换php中双引号的小程序

     因为本人有一点点代码洁癖,看不习惯老代码中的$POST["abc"]或$_GET[abc]什么的,还有没必要用双引号的地方不用单引号的。所以专门写了个php小程序。

    这个程序只能转纯php文件,不能用于模版文件。另外如果你定义的常量不是大写的,及字符串用了<<<的格式(我在老代码中就没见过,所以没考虑),应该会做出错误的替换。修改文件时注意文件备份。


    这个程序是给自己用的,很多地方不规范,比如应该用有意义名称的地方用的是0啊1啊,这个不要学。代码写得不怎么样,只是能用。注意如果文件中有汉字,且是utf-8的文件,需要把文件转成gb2312的,不然导出的文件运行可能会有问题。


<?php
if (isset($_POST['cmd']))
{
	var_dump($_FILES);
		
	if ($filename = $_FILES['uploadfile']['tmp_name'])
	{
  
		$handle = fopen($filename, 'r');
		$chaotic = fread($handle, filesize ($filename));
			
		quotation_mark($chaotic);
		$chaotic = patch_mark($chaotic);
			
		$enfile = 'en' . time() . '.txt';
		$f = fopen($enfile, 'wb');
		fputs($f, $chaotic); 
		fclose($f); 
	}
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  </head>
  <body>
	
	<FORM ACTION="<?php echo $_SERVER['PHP_SELF']; ?>" ENCTYPE="multipart/form-data" METHOD=POST>
		<INPUT TYPE="HIDDEN" NAME="cmd" VALUE="list">
		<table>
			<tr>
				<td>文件:</td>  
				<td><INPUT TYPE="FILE" NAME="uploadfile" SIZE="24" MAXLENGTH="80"></td>
			</tr>
		</table>
		<INPUT TYPE="SUBMIT" VALUE="Upload File!" NAME="sendit">
	</FORM>
  </body>
</html>

<?php

function patch_mark( & $str)
{
	$patch = '';

	$strlen = strlen($str);
	
	$odd = array(false);
	$two = array(false);
	$var = array('1', 0);
	for ($i=0; $i<$strlen; ++$i)
	{
	
		if ($str[$i]==="'" && ! $two[0])
		{
			if ($odd[0] === false)
			{
				$odd[0] = true;
			}
			elseif ($str[$i-1] !== '\\')
			{
				$odd[0] = false;
			}
		}
		elseif ($str[$i]==='"' && ! $odd[0])
		{
			if ($two[0] === false)
			{
				$two[0] = true;
			}
			elseif ($str[$i-1] !== '\\')
			{
				$two[0] = false;
			}
		}
		elseif ( ! $odd[0] && ! $two[0])
		{
			if ($str[$i]==='[' && $var[0]==='1')
			{
				if ($str[$i+1]<'{' && $str[$i+1]>'`')
				{
					$var[0] = '2';
					$var[1] = $i+3;
					$patch .= $str[$i]."'";
					continue;
				}
			}
			elseif ($str[$i]===']' && $var[0]==='2')
			{
				$var[0] = '1';
				if ($str[$i-1]<'{' && $str[$i-1]>'`')
				{
					$patch .= "'".$str[$i];
					continue;
				}
				elseif ($var[1] !== 0)
				{
					$patch[$var[1]] = '';
					$var[1] = 0;
				}
			}
		}
		
		$patch .= $str[$i];
		
	}//end for
	
	return $patch;
}

function quotation_mark( & $str)
{
	$strlen = strlen ($str);
	
	$odd = array (false);
	$two = array (false, 0, false);
	
	$line = array (false, '');
	for ($i=0; $i<$strlen; ++$i)
	{
		if ( ! $line[0] && ! $odd[0] && ! $two[0])
		{
			if (($str[$i]==='/' && $str[$i+1]==='/') OR $str[$i]==='#')
			{
				$line[0] = true;
				$line[1] = '1';
			}
			elseif (isset($str[$i-1]) && $str[$i-1]==='/' && $str[$i]==='*')
			{
				$line[0] = true;
				$line[1] = '2';
			}
		}
		elseif ($line[1]==='1' && $str[$i]==="\n"
			OR ($line[1]==='2' && $str[$i]==='*' && $str[$i+1]==='/'))
		{
			$line[0] = false;
			$line[1] = '';
			continue;
		}
		
		if ($line[0]){continue;}
		
		if ($str[$i]==="'" && ! $two[0])
		{
			if ($odd[0] === false)
			{
				$odd[0] = true;
			}
			elseif ($str[$i-1] !== '\\')
			{
				$odd[0] = false;
			}
		}
		elseif ($str[$i]==='"' && ! $odd[0])
		{
			if ($two[0] === false)
			{
				$two[0] = true;
				$two[1] = $i;
				$two[2] = false;
			}
			elseif ($str[$i-1] !== '\\')
			{
				if ( ! $two[2])
				{
					$str[$i] = "'";
					$str[$two[1]] = "'";
				}
				$two[0] = false;
				$two[2] = false;
			}
		}
		elseif ($two[0]  && ! $odd[0])
		{
			if ($str[$i]==='$' OR $str[$i]==="'")
			{
				$two[2] = true;
			}
			elseif ($str[$i-1] === '\\')
			{
				if ($str[$i] === '\\' OR 
					$str[$i] === 'n' OR 
					$str[$i] === 'r' OR 
					$str[$i] === 't' OR 
					$str[$i] === '0' OR 
					$str[$i] === 'x')
				{
					$two[2] = true;
				}
			}
		}
		
	}//end for
}


?>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值