douping3860 2019-04-29 16:52
浏览 100
已采纳

使用PHP切片图像src字符串

I am trying to pull the image src from an XML-based Atom Feed using PHP. I want to do this by slicing the string in the feed so that only the URL is grabbed.

So far I have been able to use the substr() command to slice a specific string length. The issue is the length of the image URLs will often vary in the feed, so I need to slice based on a specific character.

I tried using explode to specify a character to slice at:

foreach ($array['entry'] as $post) {
            if ($current > $max) break;
            $posts[] = [
            'post_img' => explode("\"", $post['content'], 2),

...but that didn't work. Here’s the XML code I am trying to pull from:

<content type="html">&lt;img alt="" class="attachment image image" src="http://awpagesociety.com/attachments/20aa91b841d6a49dd945a97af37509add2680573/store/limit/452/300/e6941ac426f6cbca5774cad6f2e8b6447c96d92d32957be6709dac201de7/Brady-Bush.jpg" 

And here is the method in full. The url, post_content and post_title fields are all assigning correctly:

    $feed = getRssFile();
    if ($feed == false) return;
    $xml = simplexml_load_file($feed);
    $json = json_encode($xml);
    $array = json_decode($json,TRUE);
    $posts = [];
    if (count($array['entry'])) {
        $max = 3;
        $current = 1;
        foreach ($array['entry'] as $post) {
            if ($current > $max) break;
            $posts[] = [
            'post_img' => explode("src=", $post['content'], //isn't working
            'post_title' => $post['title'],
                'post_content' => substr(sanitizeContent($post['content']), 0, 200),
                'url' => $post['link']['@attributes']['href']
            ];
            $current++;
        }
    }
    return $posts;

}

explode() doesn't assign anything to the src field of the image when I check in the element inspector. It just says img src(unknown) Are there any alternatives to getting the result I need?

EDIT: here is what is returned from doing

           $exp = explode("src=", $thing);
            var_dump($exp[1]);
            var_dump($exp);

Result:

string(226) ""http://awpagesociety.com/attachments/c881c9ec924cfd1ee7f0650f2b6de9b36d4e31a9/store/limit/452/300/25f7a5696d2bd1d5e4d1137924ff04e3e2c8333fa8c71e005462a4e710d9/Walker_Recording.jpg" /><iframe style="border: none" " array(3) { [0]=> string(43) " string(226) ""http://awpagesociety.com/attachments/c881c9ec924cfd1ee7f0650f2b6de9b36d4e31a9/store/limit/452/300/25f7a5696d2bd1d5e4d1137924ff04e3e2c8333fa8c71e005462a4e710d9/Walker_Recording.jpg" /><iframe style="border: none" " [2]=> string(3454) ""//html5-player.libsyn.com/embed/episode/id/9576506/height/90/theme/custom/thumbnail/yes/direction/forward/render-playlist/no/custom-color/000000/" height="90" width="50%" scrolling="no" allowfullscreen="" webkitallowfullscreen="" mozallowfullscreen="" oallowfullscreen="" msallowfullscreen=""><span id="selection-marker-1" class="redactor-selection-marker"></span></iframe> <p><em><br></em></p> <p><em>If you’re interested in more conversations like this on The New CCO, subscribe on&nbsp;<span class="redactor-unlink"></span><span class="redactor-unlink"></span><a href="https://podcasts.apple.com/us/podcast/upskilling-a-workforce-reggie-walker-pwc/id1212422149?i=1000436862014" target="_blank">iTunes</a>,&nbsp;<span class="redactor-unlink"></span><a href="https://play.google.com/music/m/Dd6jidfd7eq4pzgwx7p3w6gigxm?t=Upskilling_a_Workforce_-_Reggie_Walker_PwC-The_New_CCO" target="_blank">Google Play</a>, or&nbsp;<span class="redactor-unlink"></span><span class="redactor-unlink"></span><a href="https://open.spotify.com/show/5oLW0nzEPyNo7mfcSFfIcu?si=gDn3b288RoiG8k9Xz9xH6g" target="_blank">Spotify</a>.</em></p> <p class="text-center">* * *</p> <p>Enterprises face severe disruption, whether via technology, business model, new competition, etc. In order to keep up, organizations must answer fundamental questions about the nature of their business, starting with their people. “What kind of culture do we need to compete in our industry? What does it look like, feel like, sound like? What are the base skills our people possess? Where do they come from?”&nbsp;</p> <p>These are some of the questions Reggie Walker, Chief Commercial Officer at PwC, has wrestled with while leading the enterprise's communications function over the past three years. He’s led a critical organization-wide effort around digital upskilling to better align PwC’s people with its business strategy. He’s also unified the Communications, Sales and Marketing functions, streamlining an operation that was once disparate entities.&nbsp;</p> <p>On this episode of The New CCO, we’ll learn more about each of these initiatives from Reggie and how they ladder up to a new kind of CCO role that’s swiftly changing in order to adapt to new disruptive factors.&nbsp;</p> <p>Here’s Reggie’s take on where he sees the future of work going over the next five years:</p> <p>“The opportunities are almost endless. We have to be responsible. And by that I mean there’s a lot of things we can do with technology. We have to make sure we’re not overextending the reach of certain technologies and cannibalizing jobs and opportunities. But, man, where will it not take us? That’s the fun part.”</p> <p><em>Do you have a story to tell? Share it with us. Please reach out to Justin Pallenik at <a href="mailto:jpallenik@page.org" target="_blank">jpallenik@page.org</a> with your CCO story.</em></p>" } string(3252) ""http://awpagesociety.com/attachments/20aa91b841d6a49dd945a97af37509add2680573/store/limit/452/300/e6941ac426f6cbca5774cad6f2e8b6447c96d92d32957be6709dac201de7/Brady-Bush.jpg" /><p>

And I want to just return each image source separately, such as

"http://awpagesociety.com/attachments/c881c9ec924cfd1ee7f0650f2b6de9b36d4e31a9/store/limit/452/300/25f7a5696d2bd1d5e4d1137924ff04e3e2c8333fa8c71e005462a4e710d9/Walker_Recording.jpg", "http://awpagesociety.com/attachments/20aa91b841d6a49dd945a97af37509add2680573/store/limit/452/300/e6941ac426f6cbca5774cad6f2e8b6447c96d92d32957be6709dac201de7/Brady-Bush.jpg"

Basically want to cut all of the other content out such as the text between the styling tags and other formatting.

EDIT 2 XML sample:

<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <id>tag:page.org,2005:/blog</id>
  <link rel="alternate" type="text/html" href="https://page.org"/>
  <link rel="self" type="application/atom+xml" href="https://page.org/blog.atom"/>
  <title>Blog | Arthur W. Page Society</title>
  <updated>2019-04-29T16:00:00Z</updated>
  <entry>
    <id>tag:page.org,2005:BlogPost/29039</id>
    <published>2019-04-29T16:00:00Z</published>
    <updated>2019-04-30T15:52:28Z</updated>
    <link rel="alternate" type="text/html" href="https://page.org/blog/the-new-cco-podcast-upskilling-a-workforce-reggie-walker-pwc"/>
    <title>The New CCO Podcast: Upskilling a Workforce - Reggie Walker, PwC</title>
    <content type="html">&lt;img alt="" class="attachment image image" src="http://awpagesociety.com/attachments/c881c9ec924cfd1ee7f0650f2b6de9b36d4e31a9/store/limit/452/300/25f7a5696d2bd1d5e4d1137924ff04e3e2c8333fa8c71e005462a4e710d9/Walker_Recording.jpg" /&gt;&amp;lt;iframe style=&amp;quot;border: none&amp;quot; src=&amp;quot;//html5-player.libsyn.com/embed/episode/id/9576506/height/90/theme/custom/thumbnail/yes/direction/forward/render-playlist/no/custom-color/000000/&amp;quot; height=&amp;quot;90&amp;quot; width=&amp;quot;50%&amp;quot; scrolling=&amp;quot;no&amp;quot; allowfullscreen=&amp;quot;&amp;quot; webkitallowfullscreen=&amp;quot;&amp;quot; mozallowfullscreen=&amp;quot;&amp;quot; oallowfullscreen=&amp;quot;&amp;quot; msallowfullscreen=&amp;quot;&amp;quot;&amp;gt;&amp;lt;span id=&amp;quot;selection-marker-1&amp;quot; class=&amp;quot;redactor-selection-marker&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;If you’re interested in more conversations like this on The New CCO, subscribe on&amp;amp;nbsp;&amp;lt;span class=&amp;quot;redactor-unlink&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;redactor-unlink&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;a href=&amp;quot;https://podcasts.apple.com/us/podcast/upskilling-a-workforce-reggie-walker-pwc/id1212422149?i=1000436862014&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;iTunes&amp;lt;/a&amp;gt;,&amp;amp;nbsp;&amp;lt;span class=&amp;quot;redactor-unlink&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;a href=&amp;quot;https://play.google.com/music/m/Dd6jidfd7eq4pzgwx7p3w6gigxm?t=Upskilling_a_Workforce_-_Reggie_Walker_PwC-The_New_CCO&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Google Play&amp;lt;/a&amp;gt;, or&amp;amp;nbsp;&amp;lt;span class=&amp;quot;redactor-unlink&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;redactor-unlink&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;a href=&amp;quot;https://open.spotify.com/show/5oLW0nzEPyNo7mfcSFfIcu?si=gDn3b288RoiG8k9Xz9xH6g&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Spotify&amp;lt;/a&amp;gt;.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;text-center&amp;quot;&amp;gt;* * *&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Enterprises face severe disruption, whether via technology, business model, new competition, etc. In order to keep up, organizations must answer fundamental questions about the nature of their business, starting with their people. “What kind of culture do we need to compete in our industry? What does it look like, feel like, sound like? What are the base skills our people possess? Where do they come from?”&amp;amp;nbsp;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;These are some of the questions Reggie Walker, Chief Commercial Officer at PwC, has wrestled with while leading the enterprise&amp;#39;s communications function over the past three years. He’s led a critical organization-wide effort around digital upskilling to better align PwC’s people with its business strategy. He’s also unified the Communications, Sales and Marketing functions, streamlining an operation that was once disparate entities.&amp;amp;nbsp;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;On this episode of The New CCO, we’ll learn more about each of these initiatives from Reggie and how they ladder up to a new kind of CCO role that’s swiftly changing in order to adapt to new disruptive factors.&amp;amp;nbsp;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Here’s Reggie’s take on where he sees the future of work going over the next five years:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;“The opportunities are almost endless. We have to be responsible. And by that I mean there’s a lot of things we can do with technology. We have to make sure we’re not overextending the reach of certain technologies and cannibalizing jobs and opportunities. But, man, where will it not take us? That’s the fun part.”&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Do you have a story to tell? Share it with us. Please reach out to Justin Pallenik at &amp;lt;a href=&amp;quot;mailto:jpallenik@page.org&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;jpallenik@page.org&amp;lt;/a&amp;gt; with your CCO story.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;</content>
    <author>
  • 写回答

1条回答 默认 最新

  • douyazi1129 2019-04-29 22:19
    关注

    You're not using explode correctly for what you're trying to do. Explode

    <?php
    $thing = "<content type=\"html\">&lt;img alt=\"\" class=\"attachment image image\" src=\"http://awpagesociety.com/attachments/20aa91b841d6a49dd945a97af37509add2680573/store/limit/452/300/e6941ac426f6cbca5774cad6f2e8b6447c96d92d32957be6709dac201de7/Brady-Bush.jpg\"";
    var_dump($thing);
    $exp = explode("src=", $thing);
    var_dump($exp);
    ?>
    
    [root@test ~]# ./test.php
    string(246) "<content type="html">&lt;img alt="" class="attachment image image" src="http://awpagesociety.com/attachments/20aa91b841d6a49dd945a97af37509add2680573/store/limit/452/300/e6941ac426f6cbca5774cad6f2e8b6447c96d92d32957be6709dac201de7/Brady-Bush.jpg""
    array(2) {
      [0]=>
      string(67) "<content type="html">&lt;img alt="" class="attachment image image" "
      [1]=>
      string(175) ""http://awpagesociety.com/attachments/20aa91b841d6a49dd945a97af37509add2680573/store/limit/452/300/e6941ac426f6cbca5774cad6f2e8b6447c96d92d32957be6709dac201de7/Brady-Bush.jpg""
    }
    

    The extra quotes are a by-product of shoving it into a string for example's purposes, but this will get you the URL if it's consistently the last element of the string. If it's not you can take $exp[1] and explode it again using space (" ") as the needle and $exp[1] as the haystack. The resulting array will have the URL as its first element.


    Update to OP Comment/Code:

    Please read the documentation for explode.

    $thing is assigned to a specific string

    Explode only works on strings. If I'm interpreting you correctly, the xml value that I put into my example string...

    <content type="html">&lt;img alt="" class="attachment image image" src="http://awpagesociety.com/attachments/20aa91b841d6a49dd945a97af37509add2680573/store/limit/452/300/e6941ac426f6cbca5774cad6f2e8b6447c96d92d32957be6709dac201de7/Brady-Bush.jpg"
    

    is the value of $post['content']. If that's the case, then this is the string you want to explode. The part you're missing:

    Explode returns an array

    To get a single piece of an exploded string, you need to reference the correct index of the resulting array. Look at my initial example again to see exactly what explode returns:

     array(2) {
      [0]=>
      string(67) "<content type="html">&lt;img alt="" class="attachment image image" "
      [1]=>
      string(175) ""http://awpagesociety.com/attachments/20aa91b841d6a49dd945a97af37509add2680573/store/limit/452/300/e6941ac426f6cbca5774cad6f2e8b6447c96d92d32957be6709dac201de7/Brady-Bush.jpg""
    }
    

    It's an array filled with strings. By assigning explode's return to that key 'post_img', you're making the value an entire array, not a single string. Creating a multi-dimensional array within $posts and then trying to reference values as if they were single elements, this is never going to work.

    If this still doesn't make things clear, provide a full example of the XML being returned by simplexml_load_file().

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘