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().

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题