【问题标题】:wrap long words or long characters ignoring html tags换行忽略 html 标签的长词或长字符
【发布时间】:2012-09-26 00:58:03
【问题描述】:

我需要用span标签包裹长词,例如:

$string = 'aaaaaaaaaaaaaaaa{}^?¿*!-<a href="#">link here</a>aaaaaaaaaa<br />aaaa';

我需要打印这个:

(每8个字符删去html标签)

"<span>aaaaaaaa</span>
<span>aaaaaaaa</span>
<span>{}^?¿*!-</span>
<a href="#">link here</a>
<span>aaaaaaaa</span>
aa
<br />
aaaa"

类似于 facebook (&lt;span class="word_break"&gt;&lt;/span&gt;)

脸书代码:

&lt;span&gt;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&lt;/span&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;

有什么想法吗? :)

非常感谢

【问题讨论】:

  • 您要包装的模式是什么?那么你所说的“类似于 facebook () 之类的东西”是什么意思?
  • 我试试这个:preg_replace('~[^\s\n\r\t]+~', '&lt;span&gt;&lt;/span&gt;', $text) facebook 用 span 标签包装 &lt;span&gt;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&lt;/span&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;
  • 好吧,如果您使用 php,您可以尝试 chunk_split ( $string, 8 ); 将字符串溢出,然后将其放入循环中的 span 中
  • 到目前为止您尝试了哪些方法,遇到了哪些障碍?添加这将很有用,因为否则您似乎要求提供完整的解决方案,并且在此站点上有点不喜欢,因此您可能不会对您的问题给予太多关注(例如,我只在这里发表评论,因为我认为这是您的第一个问题这样您就可以从社区中获得一些额外的评论)。

标签: php text word-wrap


【解决方案1】:

好吧,我有点不对劲。你需要 str_split();这应该给你一个可行的数组。

$str = 'aaaaaaaaaaaaaaaa{}^?¿*!-<a href="#">link here</a>aaaaaaaaaa<br />aaaa';

print_r(str_split($str, 8));

**This will return** 

(
    [0] => aaaaaaaa
    [1] => aaaaaaaa
    [2] => {}^*!-<a
    [3] =>  href="#
    [4] => ">link h
    [5] => ere</a>a
    [6] => aaaaaaaa
    [7] => a<br />a
    [8] => aaa
)

Look at the docs here

只需循环,为每个循环添加一个跨度。

编辑

我刚刚意识到这并不能解决“忽略 HTML 标签”的问题。你可能会很快调整它。请不要使用 REGEX 解析 HTML 的DARK ROAD。哈哈。

【讨论】:

    【解决方案2】:

    我错了一个 PHP 函数 word_wrap

    <?php
    $string = 'abcdefghijklmnop{}^??*!-<a href="#">link here</a>abcdefghij<br />abcd';
    
    print_r(word_wrap($string));
    
    // Function Starts Here
    function word_wrap($string, $chunk_size = 8) {
        $offset = 0;
        $result = array();
        while(preg_match('#<(\w+)[^>]*>.*?</\1>|<\w+[^>]*/>#', $string, $match, PREG_OFFSET_CAPTURE, $offset)) {
            if($match[0][1] > $offset) {
                $non_html = substr($string, $offset, $match[0][1] - $offset);
                $chunks = str_split($non_html, $chunk_size );
                foreach($chunks as $s) {
                    // Wrap text with length 8 in <span>, otherwise leave as it is
                    $result[] = (strlen($s) == $chunk_size  ? "<span>" . $s . "</span>" : $s);
                }
            } 
            // Leave HTML tags untouched
            $result[] = $match[0][0];
            $offset = $match[0][1] + strlen($match[0][0]);
        }
        // Process last unmatched string
        if(strlen($string) > $offset) {
            $non_html = substr($string, $offset);
            $chunks = str_split($non_html, $chunk_size );
            foreach($chunks as $s) {
                $result[] = strlen($s) == $chunk_size  ? "<span>" . $s . "</span>" : $s;
            }
        } 
        return $result;
    }
    

    产生的输出

    Array
    (
        [0] => <span>abcdefgh</span>
        [1] => <span>ijklmnop</span>
        [2] => <span>{}^??*!-</span>
        [3] => <a href="#">link here</a>
        [4] => <span>abcdefgh</span>
        [5] => ij
        [6] => <br />
        [7] => abcd
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      相关资源
      最近更新 更多