首页 > 解决方案 > 从一个字符串中分解多个元素

问题描述

我有以下代码存储在字符串中。

<ol class="tracklist">
    <li class="track" data-file="https://www48.zippyshare.com/music/BCFNtvU9/0/file.mp3" data-index="0">
      <a class="title name" href="#"><span class="name">1. MI Abaga - Do you know who you are_ Take some time and meditate on you</span></a>
      <ul class="actions">
        <li>
          <a href=https://www41.zippyshare.com/v/BCFNtvU9/file.html" target="_blank"><span class="fa fa-arrow-down mobile-only-ib"></span>
          <span class="text desktop-only-ib">Download</span></a>
        </li>
      </ul>
    </li>
    <li class="track" data-file="https://www41.zippyshare.com/music/FLCe2uFJ/0/file.mp3" data-index="1">
      <a class="title name" href="#"><span class="name">2. MI Abaga - Last Night I Had A Dream About A Hummingbird</span></a>
      <ul class="actions">
        <li>
          <a href="https://www41.zippyshare.com/v/FLCe2uFJ/file.html" target="_blank"><span class="fa fa-arrow-down mobile-only-ib"></span>
          <span class="text desktop-only-ib">Download</span></a>
        </li>
      </ul>
    </li>
</ol>

此示例的字符串将被称为$audio包含上述数据的字符串,我试图删除包含的部分,https://wwwRANDOMNUMBER.zippyshare.com/v/RANDOM-ID/file.html然后在它们上使用base64_encode以编程方式隐藏用户的所有文件链接,直到他们点击为止。

如何用编码版本替换现有内容?

标签: php

解决方案


这不能回答您的(隐含的)第二个问题,即用户点击后如何解码 base64。但首先要对它们进行编码:

preg_match_all('#(https://www\d+.zippyshare\.com/(?:[^"]+))#',$audio, $matches);

foreach ( $matches as $match )
{
    $encoded = base64_encode($match[1]);
    $audio = str_replace($match[1], $encoded, $audio);
}

推荐阅读