替换字符串中的正斜杠时出现问题

时间:2018-02-12 作者:Bluekable

我在wordpress应用程序中尝试用php进行简单的str\\u替换时遇到了一个非常奇怪的问题。

我正在尝试使用wordpress函数创建图像路径,以获取站点路径和资源路径。下面是我尝试过的3种方法,都给出了我不理解的结果。

原始方法:(这在我自己的localhost上运行,但在prod中,管理端为前端提供了不同的$fullpath)

$site_url = get_site_url();
$homepath = get_home_path();
$filepath = str_replace($site_url.\'/\', \'\', $attachment->image_src_large[0]);
$fullpath = $homepath.$filepath;
前端的输出为$fullpath

string(114) "/usr/www/users/currentuser/wp-content/uploads/2017/10/image1-2962-1024x684.jpg"
但在Admin End was中时(请注意双正斜杠)

string(114) "/usr/www/users/currentuser//wp-content/uploads/2017/10/image1-2962-1024x684.jpg"
我注意到在生产服务器上$attachment->image_src_large[0] 没有像在dev服务器上那样包含域。因此,考虑到这一点,为了解决管理端的双斜杠问题,我尝试了许多方法,详情如下-这是事情开始变得有点奇怪的时候:

2.

$site_url = get_site_url();
$homepath = get_home_path();
$filepath = $attachment->image_src_large[0];
$fullpath = str_replace("//", "/", $homepath.$filepath);

//var_dumps Give
//FRONT END
//$attachment->image_src_large[0] - string(89) "/wp-content/uploads/2017/10/image1-2962-1024x684.jpg" 
//$filepath - string(114) "/usr/www/users/currentuser/https:/www.currentdomain.co.za/wp-content/uploads/2017/10/image1-2962-1024x684.jpg" 

//ADMIN (Gave http instead of https)
//$attachment->image_src_large[0] - string(84) "/wp-content/uploads/2017/10/image1-2962-1024x684.jpg" 
//$filepath - string(109) "/usr/www/users/currentuser/http:/currentdomain.co.za/wp-content/uploads/2017/10/image1-2962-1024x684.jpg"

$site_url = get_site_url();
$homepath = get_home_path();
$filepath = str_replace(\'/\', \'\', $attachment->image_src_large[0]);
$fullpath = $homepath.$filepath;

//var_dumps Give
//$attachment->image_src_large[0] - string(51) "/wp-content/uploads/2017/10/image1-1024x684.jpg"
//$filepath - NULL
3。

$site_url = get_site_url();
$homepath = get_home_path();
$filepath = $attachment->image_src_large[0];
$fullpath = $homepath.$filepath;
$finalpath = str_replace("//", "/", $fullpath);

$fullpath - string(115) "/usr/www/users/currentuser//wp-content/uploads/2017/10/image-1-1024x684.jpg" 
$finalpath - string(114) "/usr/www/users/currentuser/https:/www.currentdomain.co.za/wp-content/uploads/2017/10/image-1-1024x684.jpg"
奇怪的是$finalpath字符串与$fullpath sting的大小,看起来str\\u replace可以工作,但当php读取字符串时,它会替换/使用域

4、尝试转义要插入的正斜杠

...
$finalpath = str_replace("//", "\\/", $fullpath);

//$fullpath - string(110) "/usr/www/users/currentuser//wp-content/uploads/2017/10/image-1-1024x684.jpg" 
//$finalpath - string(110) "/usr/www/users/currentuser/http:\\/currentdomain.co.za/wp-content/uploads/2017/10/image-1-1024x684.jpg" 
我搞不懂这个!如果有人能帮忙,我将不胜感激!

1 个回复
SO网友:Bluekable

我想出了一个解决办法!这并不能解释我看到的一些奇怪的str\\u replace活动,所以如果有人能解释的话,请解释。

但为了避开我所经历的最初问题-线路

$filepath = str_replace($site_url.\'/\', \'\', $attachment->image_src_large[0]);
只对其中一个有影响backfront 结束,但not both 因为$attachment->image_src_large[0] 每个人都不一样。在前端,我会https://... 但在后端,无论出于什么原因,我都会http://....

所以我扩展了$site_url = get_site_url(); 将成为:

$site_url = get_site_url();
  if (strpos($site_url, \'https\') !== false){
    $ssl_site_url = $site_url;
    $plain_site_url = str_replace("https", "http", $site_url);
    } else {
    $plain_site_url = $site_url;
    $ssl_site_url = str_replace("http", "https", $site_url);
    }
然后做了一个str_replace() 对于两个字符串。可能有点过头了,但无论采用何种协议,它都会起作用$attachment->image_src_large[0] 事实证明是的。

结束

相关推荐

如果用户已登录并在主页上重定向,则使用PHP

我是一个彻头彻尾的傻瓜,但我正在努力学习,我被难住了。我有一个登录页面作为我的静态主页,我想做一个if语句,这样如果用户登录并转到静态主页,他们就会被重定向到另一个包含内容的页面。到目前为止,这是我所拥有的,但它不起作用:if ( is_user_logged_in() && is_page( home_url ) ) { wp_redirect(\'http://example.com/\') ; } 你能不能不仅给我一个答案,而且给我一个小小的解释,让