因为本人有一点点代码洁癖,看不习惯老代码中的$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
}
?>