一个正则表达式,在Apache上工作正常,但在nginx上失败

我有一个以下正则表达式,它在apache中运行良好,但在nginx中运行不正确。</ p>

  preg_replace(“/(src = \”)(。*)([^&gt;] *)(“。$ base_url_mod。”\ /)/“,
”data- $ 1 $ 2 $ 3“,$ content”;
</ code> </ pre>

如果我删除(“。$ base_url_mod。”\ /)/ </ code>它开始工作但是 这不是我想要的。</ p>

完整功能:</ strong> </ p>

  function tt_type_filter($ content){
$ post_type = get_post_type();

if if($ post_type =='page'|| $ post_type =='post'){
$ tt_connector = get_option('tt_connector');
$ base_url = get_site_url( );

$ base_url_arr = parse_url($ base_url);
$ base_url_mod = $ base_url_arr [scheme]。'\:\ / \ /'。$ base_url_arr [host]。'\'。$ base_url_arr [path ];

if($ tt_connector == $ base_url)
返回preg_replace(“/(src = \”)(。*)([^&gt;] )(“。$ base_url_mod。”\ /) /“,”data- $ 1 $ 2 $ 3“,$ content);
else
返回preg_replace( “/(src=\")(.
)([^>]*)(uploads\/)/”,“data- $ 1 $ 3”,$ content);
}
}
</ code > </ pre>

例如。(此表达式的用途)</ strong> </ p>

http://wp.mysite.net /wp4/wp-content/uploads/2012/10/someimage.jpg
s应该用
http://api.mydomain.com/images/domain/2012/10/someimage替换。 jpg </ code> </ p>
</ div>

展开原文

原文

I have a following regex expression which works well in apache but doesn't in nginx.

 preg_replace("/(src=\")(.*)([^>]*)(".$base_url_mod."\/)/",
  "data-$1$2$3", $content);

If I remove (".$base_url_mod."\/)/ it started to work but that's not what I want.

Full function:

function tt_type_filter ( $content ) {
    $post_type = get_post_type();

    if($post_type == 'page' || $post_type == 'post') {
        $tt_connector = get_option ( 'tt_connector' );
        $base_url = get_site_url();

        $base_url_arr = parse_url($base_url);
        $base_url_mod = $base_url_arr[scheme]. '\:\/\/' .$base_url_arr[host]. '\\' .$base_url_arr[path];

        if($tt_connector == $base_url) 
            return preg_replace("/(src=\")(.*)([^>]*)(".$base_url_mod."\/)/", "data-$1$2$3", $content);
        else 
            return preg_replace("/(src=\")(.*)([^>]*)(uploads\/)/", "data-$1$3", $content);
    }
}

Eg.(Purpose of this expression)

http://wp.mysite.net/wp4/wp-content/uploads/2012/10/someimage.jpg should be replaced with http://api.mydomain.com/images/domain/2012/10/someimage.jpg

duannengling4705
duannengling4705 我试试吧。
接近 6 年之前 回复
dongpian6319
dongpian6319 如果你在$base_url_mod上调用preg_quote会有帮助吗?也许nginx版本正在打破你的正则表达式。您是否比较了两台服务器上$base_url_mod的值?
接近 6 年之前 回复

1个回答



我已设法自行修复它。</ p>

问题在于 $ base_url_mod </代码>。 当 $ base_url_arr [path] </ code>具有空/无值时,它在路径末尾添加 \ / </ code>。 所以我要在函数中添加一个条件并开始工作。</ p>

这是一个更新的函数:(在apache和nginx上都能正常工作) </ em> </ strong> </ p>

  function tt_type_filter($ content){
$ post_type = get_post_type();

if($ post_type =='page '|| $ post_type =='post'){
$ tt_connector = get_option('tt_connector');
$ base_url = get_site_url();

$ base_url_arr = parse_url($ base_url);
if(n if) $ base_url_arr [path]){
$ base_url_mod = $ base_url_arr [scheme]。 '\:\ / \ /'。$ base_url_arr [主持人]。 '\'。$ base_url_arr [path];
} else {
$ base_url_mod = $ base_url_arr [scheme]。 '\:\ / \ /'。$ base_url_arr [host];
}

if if($ tt_connector == $ base_url)
return preg_replace(“/(src = \”)(。*)([ ^&gt;] )(“。$ base_url_mod。”\ /)/“,”data- $ 1 $ 2 $ 3“,$ content);
else
返回preg_replace(”/(src = \“)(。
)([^>] *)(上传\ /)/“,”data- $ 1 $ 3“,$ content);
}
}
</ code> </ pre>
</ div>

展开原文

原文

I have managed to fix it at my own.

The issue was with $base_url_mod. It was adding \/ at the end of the path when $base_url_arr[path]having empty/no value. So I'd to put a condition in the function and it started to work.

Here is an updated function: (works fine on both, apache and nginx)

function tt_type_filter ( $content ) {
    $post_type = get_post_type();

    if($post_type == 'page' || $post_type == 'post') {
        $tt_connector = get_option ( 'tt_connector' );
        $base_url = get_site_url();

        $base_url_arr = parse_url($base_url);
        if ($base_url_arr[path]) {
            $base_url_mod = $base_url_arr[scheme]. '\:\/\/' .$base_url_arr[host]. '\\' .$base_url_arr[path];
        } else {
            $base_url_mod = $base_url_arr[scheme]. '\:\/\/' .$base_url_arr[host];
        }

        if($tt_connector == $base_url)
            return preg_replace("/(src=\")(.*)([^>]*)(".$base_url_mod."\/)/", "data-$1$2$3", $content);
        else
            return preg_replace("/(src=\")(.*)([^>]*)(uploads\/)/", "data-$1$3", $content);
    }
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问