如何将<span>之前和之后的文本封装到另一个<span>中?

时间:2018-03-19 07:53:53

标签: php

这是我从数据库中获得的文字:

 Lorem ipsum <span>dolor</span> sit amet

如何在使用PHP进行跨度之前和之后包含单词?我需要用CSS来控制每个跨度。

 <span>Lorem ipsum</span> <span>dolor</span> <span>sit amet</span>

4 个答案:

答案 0 :(得分:2)

<?php
    //your code to get text from db
    $text_from_db = 'Lorem ipsum <span>dolor</span> sit amet';
    $text_parts = preg_split( '#</*span>#', $text_from_db );
    $text_output = '';
    foreach($text_parts as $key => $text_part){
        $text_output .= "<span class=\"my-class-$key\">$text_part</span>";
} 

我认为您需要使用不同的类来区别对待每个范围。

答案 1 :(得分:1)

使用preg_replace替换范围之前的所有文本,并使用标记中的数据替换范围之后的所有文本:

$data = "Lorem ipsum <span>dolor</span> sit amet";
$newdata = preg_replace('#^(.*?)(<span>.*</span>)(.*?)$#', '<span>$1</span>$2<span>$3</span>', $data);

答案 2 :(得分:0)

您可以在不需要使用简单字符串替换的正则表达式的情况下实现此目的。您可以做的是首先使用<spans>删除所有str_replace

$new_string = str_replace('<span>', '', $string_from_db);
$new_string = str_replace('</span>', '', $new_string);

其中也可以使用如下:

$new_string = str_replace(array('<span>', '</span>'), '', $string_from_db);

然后将<span>再次放在整个字符串上:

$new_string = '<span>' . $new_string . '</span>';

将产生以下结果:

<span>Lorem ipsum dolor sit amet</span>

由于您没有指定每个范围需要不同的类,我认为将文本包含在单个范围内对您来说同样适用

答案 3 :(得分:0)

你可以在php中使用explode功能。

$str =  "Lorem ipsum <span>dolor</span> sit amet";
$sp = explode("<span>",$str);
$sp1 = explode("</span>",$str);
preg_match_all('/<span>.*?<\/span>/is', $str, $matches);
echo "<span>".$sp[0]."</span> ".$matches[0][0]." <span>".$sp1[1]."</span>";

结果:

<span>Lorem ipsum </span> <span>dolor</span> <span> sit amet</span>