问题替换字符串中的正斜杠(php)

时间:2018-02-12 10:00:00

标签: php wordpress str-replace

我有一个非常奇怪的问题,试图在wordpress应用程序中在php中执行一个简单的str_replace。

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

原始方法:(这适用于我自己的本地主机,但是在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中时(注意双正斜杠)

string(114) "/usr/www/users/currentuser//wp-content/uploads/2017/10/image1-2962-1024x684.jpg"

我注意到在生产服务器$attachment->image_src_large[0]上没有包含在开发服务器上的域。因此,考虑到这一点,并尝试解决Admin End上的双斜杠,我尝试了许多方法,如下所述 - 这是事情开始有点怪异的时候:

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字符串vs $ fullpath sting的大小,它看起来像str_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" 

我正在寻找的输出是这个 - string(114) "/usr/www/users/currentuser/wp-content/uploads/2017/10/image1-2962-1024x684.jpg"

我无法解决这个问题!任何人都能提供帮助,我将不胜感激!

2 个答案:

答案 0 :(得分:0)

你已经有了

$homepath = '/usr/www/users/currentuser/' $filepath = /wp-content/uploads/2017/10/image1-2962-1024x684.jpg'(来自$attachment->image_src_large[0]

你可以这样做:

$fullpath = substr($homepath, 0, strlen($homepath)-1) . $filepath;
$fullpath = str_replace('https://currentdomain.co.za/', '', $fullpath);
$fullpath = str_replace('//', '/', $fullpath);

通过使用substr函数,/中的最后一个$homepath被删除(此代码从字符串的开头读取,直到最后一个字符为{{1} }})。这可能是可选的,因为浏览器/网络服务器应自动删除额外的/

接下来,用空字符串替换域名,并用空字符串替换/,特别是按此顺序。

我希望这能解决你的问题

答案 1 :(得分:0)

我找到了解决方案!并不是说它解释了我所看到的一些奇怪的str_replace活动,所以如果有人能解释一下,请做。

但要解决我遇到的原始问题 - 行

$filepath = str_replace($site_url.'/', '', $attachment->image_src_large[0]);

仅对 后退前端产生影响,但不是,因为$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]是什么原因,它都会有效。