尝试在插件页面中显示块中的文本

时间:2018-03-25 作者:Chuck

我正在编写一个插件,它需要显示从另一个网站检索到的文本(歌词中的文本),我从查询中获得的字符串显示在一行中,而我想在多行中显示它。当我在浏览器中手动输入查询地址时,我也会得到一行,但当我显示源代码时,它会显示在多行上。

你知道我怎样才能做到吗?这是我的代码,以便您了解我的意思:

public function get_lyrics($artist, $song){
    $url="https://makeitpersonal.co/lyrics?artist=".$artist."&title=".$song;
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data= curl_exec($ch);
    curl_close($ch);
    return ($data);
}
以及它的名称:

echo "Lyrics: ".$this->get_lyrics($artist, $song)."</div>";
在提问之前,我试图找到一个类似的问题,但正如你可能已经注意到的那样,我很难准确地描述我的问题,使其足够具体,并与之前的任何问题相匹配。抱歉,如果之前已回答:/

无论如何,谢谢你抽出时间!:)

1 个回复
SO网友:Friss

EDIT 2: I come up with this kind of dirty solution, 这是一个创建临时数组的函数。它将包含要添加换行符的字符串段。然后我们使用内爆将其设置回字符串。

function breakLines($str,$line_length=30,$implodechar=\'<br>\')
{
    $str_length = strlen($str); 
    $i=0;
    $o=0;
    $tmp = array();//temporary array
    for ($j=0; $j<$str_length; $j++) 
    {
        //if we are at the end of line and
        //that the current char is a space or punctuation char
        if($i>=$line_length && preg_match(\'/[\\s\\,\\;\\.\\:]/isu\', $str[$j]))
        {
            $i++;                    
            $tmp[]=trim(substr($str,$o,$i));//"\\r\\n";     
            //we update the offset              
            $o+=$i;
            //we reset our counter
            $i=0;
        }else{                    
            $i++;
        }                
    }

    return implode($implodechar,array_filter($tmp));
}
因此,您可以像这样简单地使用它:

echo "Lyrics: ".breakLines($this->get_lyrics($artist, $song))."</div>";
希望有帮助:)

EDIT: oooops, sorry I understood the contrary of what you are trying to achieve.

使用preg_replace 具有查找换行符的模式的函数?

echo "Lyrics: ".preg_replace(\'/(\\R+)?/isu\', \'\',$this->get_lyrics($artist, $song))."</div>";
我添加了较低的“u”修饰符来处理编码。

您可以在此处进行测试:http://www.phpliveregex.com/p/ns1#preg-replace

结束