<?php
if
(!defined(
'BASEPATH'
))
exit
(
'No direct script access allowed'
);
class
Myreplace {
private
$moudle_array
=
array
(
'udata'
,
'tdata'
,
'tresult'
,
'dresult'
);
private
$content
;
private
$relative_dirname
;
private
$projectid
;
private
$moudle
;
function
__construct() {
$this
->CI = &get_instance ();
}
public
function
my_replace(
$content
,
$relative
,
$projectid
,
$moudle
) {
$this
->content =
$content
;
$this
->relative_dirname =
$relative
;
$this
->projectid =
$projectid
;
if
(in_array(
strtolower
(
$moudle
),
$this
->moudle_array))
$this
->moudle =
$moudle
;
else
exit
;
switch
(
$this
->moudle) {
case
'udata'
:
$this
->CI->load->model(
'mupload_data'
,
'model'
);
break
;
case
'tdata'
:
$this
->CI->load->model(
'taskdata'
,
'model'
);
break
;
case
'tresult'
:
$this
->CI->load->model(
'taskresult'
,
'model'
);
break
;
case
'dresult'
:
$this
->CI->load->model(
'dmsresult'
,
'model'
);
break
;
default
:
break
;
}
$pattern
=
'/<img src="/static/imghw/default1.png" data-src=".$matches[2].$this- alt="php正则替换处理HTML页面的方法_php技巧" >CI->config->item(" class="lazy" (.+?)src=([\'\" ])?(.+?)([ >]+?)/i'
;
$content
= preg_replace_callback(
$pattern
,
array
(
$this
,
'image_replace'
) ,
$content
);
$pattern
=
'/<a(.+?)href=([\'\" ])?(.+?)([ >]+?)/i'
;
$content
= preg_replace_callback(
$pattern
,
array
(
$this
,
'html_replace'
) ,
$content
);
$pattern
=
'/<iframe(.+?)src=([\'\" ])?(.+?)([ >]+?)/i'
;
$content
= preg_replace_callback(
$pattern
,
array
(
$this
,
'iframe_replace'
) ,
$content
);
$pattern
=
'/<frame(.+?)src=([\'\" ])?(.+?)([ >]+?)/i'
;
$content
= preg_replace_callback(
$pattern
,
array
(
$this
,
'frame_replace'
),
$content
);
$pattern
=
'/window.open([( ]+?)([\'" ]+?)(.+?)([ )]+?)/i'
;
$content
= preg_replace_callback(
$pattern
,
array
(
$this
,
'js_replace'
),
$content
);
$pattern
=
'/background(.+?)url([( ])([\'" ]+?)(.+?)([ )+?])/i'
;
$content
= preg_replace_callback(
$pattern
,
array
(
$this
,
'css_replace'
),
$content
);
return
$content
;
}
private
function
image_replace(
$matches
) {
if
(
count
(
$matches
) < 4)
return
''
;
if
(
empty
(
$matches
[3]) )
return
''
;
$matches
[3] = rtrim(
$matches
[3],
'\'"/'
);
$parent_dir_num
= substr_count(
$matches
[3],
'../'
);
$relative_dirname
=
$this
->relative_dirname;
for
(
$i
=0;
$i
<
$parent_dir_num
;
$i
++) {
$relative_dirname
=
substr
(
$relative_dirname
, 0,
strrpos
(
$relative_dirname
,
"/"
) );
}
$relativepath
= rtrim(
$relative_dirname
,
'/'
) .
'/'
.ltrim(
$matches
[3],
'./'
);
$image_id
=
$this
->CI->model->get_id_by_path_and_project(
$relativepath
,
$this
->projectid);
if
( !
empty
(
$image_id
) ) {
if
(
$this
->moudle ==
'dresult'
) {
return
"<img src="
/
static
/imghw/default1.png
" data-src="
.
$matches
[2].
$this
- alt=
"php正则替换处理HTML页面的方法_php技巧"
>CI->config->item(
" class="
lazy
" "
.
$matches
[1].
"base_url"
).
"cdms/"
.
$this
->moudle.
"/readpic/$image_id?pid="
.
$this
->projectid .
$matches
[2].
$matches
[4];
}
else
{
return
"<img src="
/
static
/imghw/default1.png
" data-src="
.
$matches
[2].
$this
- alt=
"php正则替换处理HTML页面的方法_php技巧"
>CI->config->item(
" class="
lazy
" "
.
$matches
[1].
"base_url"
).
"cdms/"
.
$this
->moudle.
"/picfile/$image_id?pid="
.
$this
->projectid .
$matches
[2].
$matches
[4];
}
}
else
{
return
"<img src="
/
static
/imghw/default1.png
" data-src="
.
$matches
[2].
$this
- alt=
"php正则替换处理HTML页面的方法_php技巧"
>CI->config->item(
" class="
lazy
" "
.
$matches
[1]."';
if
(
empty
(
$matches
[3]) )
return
''
;
$matches
[3] = rtrim(
$matches
[3],
'\'"/'
);
if
(substr_count(
$matches
[3],
'#'
)>0)
$matches
[3] =
substr
(
$matches
[3],0,
strrpos
(
$matches
[3],
'#'
));
$parent_dir_num
= substr_count(
$matches
[3],
'../'
);
$relative_dirname
=
$this
->relative_dirname;
for
(
$i
=0;
$i
<
$parent_dir_num
;
$i
++) {
$relative_dirname
=
substr
(
$relative_dirname
, 0,
strrpos
(
$relative_dirname
,
"/"
) );
}
$relativepath
= rtrim(
$relative_dirname
,
'/'
) .
'/'
.ltrim(
$matches
[3],
'./'
);
$txtfile_id
=
$this
->CI->model->get_id_by_path_and_project(
$relativepath
,
$this
->projectid);
if
( !
empty
(
$txtfile_id
) ) {
if
(
$this
->moudle ==
'dresult'
) {
return
"<a"
.
$matches
[1].
"href="
.
$matches
[2].
$this
->CI->config->item(
"base_url"
).
"cdms/"
.
$this
->moudle.
"/readfile/$txtfile_id?pid="
.
$this
->projectid .
$matches
[2].
$matches
[4];
}
else
{
return
"<a"
.
$matches
[1].
"href="
.
$matches
[2].
$this
->CI->config->item(
"base_url"
).
"cdms/"
.
$this
->moudle.
"/txtfile/$txtfile_id?pid="
.
$this
->projectid .
$matches
[2].
$matches
[4];
}
}
else
{
return
"<a"
.
$matches
[1].
"href="
.
$matches
[2].
$matches
[3].
$matches
[2].
$matches
[4];
}
}
private
function
iframe_replace(
$matches
) {
if
(
count
(
$matches
) < 4)
return
''
;
if
(
empty
(
$matches
[3]) )
return
''
;
$matches
[3] = rtrim(
$matches
[3],
'\'"/'
);
if
(substr_count(
$matches
[3],
'#'
)>0)
$matches
[3] =
substr
(
$matches
[3],0,
strrpos
(
$matches
[3],
'#'
));
$parent_dir_num
= substr_count(
$matches
[3],
'../'
);
$relative_dirname
=
$this
->relative_dirname;
for
(
$i
=0;
$i
<
$parent_dir_num
;
$i
++) {
$relative_dirname
=
substr
(
$relative_dirname
, 0,
strrpos
(
$relative_dirname
,
"/"
) );
}
$relativepath
= rtrim(
$relative_dirname
,
'/'
) .
'/'
.ltrim(
$matches
[3],
'./'
);
$txtfile_id
=
$this
->CI->model->get_id_by_path_and_project(
$relativepath
,
$this
->projectid);
if
( !
empty
(
$txtfile_id
) ) {
if
(
$this
->moudle ==
'dresult'
) {
return
"<iframe"
.
$matches
[1].
"base_url"
).
"cdms/"
.
$this
->moudle.
"/readfile/$txtfile_id?pid="
.
$this
->projectid .
$matches
[2].
$matches
[4];
}
else
{
return
"<iframe"
.
$matches
[1].
"src="
.
$matches
[2].
$this
->CI->config->item(
"base_url"
).
"cdms/"
.
$this
->moudle.
"/txtfile/$txtfile_id?pid="
.
$this
->projectid .
$matches
[2].
$matches
[4];
}
}
else
{
return
"<iframe"
.
$matches
[1].
"src="
.
$matches
[2].
$matches
[3].
$matches
[2].
$matches
[4];
}
}
private
function
frame_replace(
$matches
) {
if
(
count
(
$matches
) < 4)
return
''
;
if
(
empty
(
$matches
[3]) )
return
''
;
$matches
[3] = rtrim(
$matches
[3],
'\'"/'
);
if
(substr_count(
$matches
[3],
'#'
)>0)
$matches
[3] =
substr
(
$matches
[3],0,
strrpos
(
$matches
[3],
'#'
));
$parent_dir_num
= substr_count(
$matches
[3],
'../'
);
$relative_dirname
=
$this
->relative_dirname;
for
(
$i
=0;
$i
<
$parent_dir_num
;
$i
++) {
$relative_dirname
=
substr
(
$relative_dirname
, 0,
strrpos
(
$relative_dirname
,
"/"
) );
}
$relativepath
= rtrim(
$relative_dirname
,
'/'
) .
'/'
.ltrim(
$matches
[3],
'./'
);
$txtfile_id
=
$this
->CI->model->get_id_by_path_and_project(
$relativepath
,
$this
->projectid);
if
( !
empty
(
$txtfile_id
) ) {
if
(
$this
->moudle ==
'dresult'
) {
return
"<frame"
.
$matches
[1].
"src="
.
$matches
[2].
$this
->CI->config->item(
"base_url"
).
"cdms/"
.
$this
->moudle.
"/readfile/$txtfile_id?pid="
.
$this
->projectid.
$matches
[2].
$matches
[4];
}
else
{
return
"<frame"
.
$matches
[1].
"src="
.
$matches
[2].
$this
->CI->config->item(
"base_url"
).
"cdms/"
.
$this
->moudle.
"/txtfile/$txtfile_id?pid="
.
$this
->projectid.
$matches
[2].
$matches
[4];
}
}
else
{
return
"<frame"
.
$matches
[1].
"src="
.
$matches
[2].
$matches
[3].
$matches
[2].
$matches
[4];
}
}
private
function
js_replace(
$matches
){
if
(
count
(
$matches
) < 4)
return
''
;
if
(
empty
(
$matches
[3]) )
return
''
;
$arr_html
= split(
','
,
$matches
[3]);
$href
=
$arr_html
[0];
$other
=
''
;
for
(
$i
=0;
$i
<
count
(
$arr_html
);
$i
++)
$other
=
$arr_html
[
$i
].
", "
;
$other
= rtrim(
$other
,
"\, "
);
$href
=rtrim(
$href
,
'\'\"'
);
if
(substr_count(
$href
,
'#'
)>0)
return
"window.open"
.
$matches
[1].
$matches
[2].
$matches
[3].
$matches
[4];;
$parent_dir_num
= substr_count(
$href
,
'../'
);
$relative_dirname
=
$this
->relative_dirname;
for
(
$i
=0;
$i
<
$parent_dir_num
;
$i
++) {
$relative_dirname
=
substr
(
$relative_dirname
, 0,
strrpos
(
$relative_dirname
,
"/"
) );
}
$relativepath
= rtrim(
$relative_dirname
,
'/'
) .
'/'
.ltrim(
$href
,
'./'
);
$txtfile_id
=
$this
->CI->model->get_id_by_path_and_project(
$relativepath
,
$this
->projectid);
if
( !
empty
(
$txtfile_id
) ) {
if
(
$this
->moudle ==
'dresult'
) {
return
"window.open"
.
$matches
[1].
$matches
[2].
$this
->CI->config->item(
"base_url"
).
"cdms/"
.
$this
->moudle.
"/readfile/$txtfile_id?pid="
.
$this
->projectid.
$matches
[2].
','
.
$other
.
$matches
[4];
}
else
{
return
"window.open"
.
$matches
[1].
$matches
[2].
$this
->CI->config->item(
"base_url"
).
"cdms/"
.
$this
->moudle.
"/txtfile/$txtfile_id?pid="
.
$this
->projectid.
$matches
[2].
','
.
$other
.
$matches
[4];
}
}
else
{
return
"window.open"
.
$matches
[1].
$matches
[2].
$matches
[3].
$matches
[4];
}
}
private
function
css_replace(
$matches
) {
if
(
count
(
$matches
) < 5)
return
''
;
if
(
empty
(
$matches
[4]) )
return
''
;
$matches
[4] = rtrim(
$matches
[4],
'\'"/'
);
$parent_dir_num
= substr_count(
$matches
[4],
'../'
);
$relative_dirname
=
$this
->relative_dirname;
for
(
$i
=0;
$i
<
$parent_dir_num
;
$i
++) {
$relative_dirname
=
substr
(
$relative_dirname
, 0,
strrpos
(
$relative_dirname
,
"/"
) );
}
$relativepath
= rtrim(
$relative_dirname
,
'/'
) .
'/'
.ltrim(
$matches
[4],
'./'
);
$image_id
=
$this
->CI->model->get_id_by_path_and_project(
$relativepath
,
$this
->projectid);
if
( !
empty
(
$image_id
) ) {
if
(
$this
->moudle ==
'dresult'
) {
return
"background"
.
$matches
[1].
"url"
.
$matches
[2].
$matches
[3].
$this
->CI->config->item(
"base_url"
).
"cdms/"
.
$this
->moudle.
"/readpic/$image_id?pid="
.
$this
->projectid .
$matches
[3].
$matches
[5];
}
else
{
return
"background"
.
$matches
[1].
"url"
.
$matches
[2].
$matches
[3].
$this
->CI->config->item(
"base_url"
).
"cdms/"
.
$this
->moudle.
"/picfile/$image_id?pid="
.
$this
->projectid .
$matches
[3].
$matches
[5];
}
}
else
{
return
"background"
.
$matches
[1].
"url"
.
$matches
[2].
$matches
[3].
$matches
[4].
$matches
[3].
$matches
[5];
}
}
}