【问题标题】:Autodetect punctuation in a HTML string, and split the string there自动检测 HTML 字符串中的标点符号,并在那里拆分字符串
【发布时间】:2011-10-05 00:07:49
【问题描述】:

我有一组标点符号:

$punctuation = array('.', '!', ';', '?');

一个字符限制变量:

$max_char = 55; 

还有一个带有 HTML 的字符串:

$string = 'This is a test string. With <a href="http://google.com">HTML</a>.';

如何使用$punctuation 数组中的一个字符作为“键”,将此字符串拆分为最多$max_chr 个字符?

所以基本上字符串应该在最近的标点符号处拆分,而不是在 HTML 标签定义/属性内(拆分是否发生在标签的内容内并且标签保持未关闭并不重要——因为我正在检查稍后用于未关闭的标签)。

【问题讨论】:

    标签: php regex string


    【解决方案1】:

    如果你想知道你是否在一个标签内,你可能需要做一些状态机,然后在字符串上使用一个循环。您可以像数组一样引用字符串排序,因此您可以执行以下操作:

     $punctuation = array('.', '!', ';', '?');
     $in_tag = false;
     $max_char = 55;
     $string = 'This is a test string. With <a href="http://google.com">HTML</a>.';
     $str_length = strlen($string) > $max_char ? $max_char : strlen($string);
     for($i = 0; $i < $str_length; $i++)
     {
        $tempChar = $string[$i]; //Get the character at position $i
        if((!$in_tag) && (in_array($tempChar, $punctuation)))
        {
             $string1 = substr($string, 0, $i);
             $string2 = substr($string, $i);
        }
        elseif((!$in_tag) && ($tempChar == "<"))
        {
            $in_tag = true;
        }
        elseif(($in_tag) && ($tempChar == ">"))
        {
            $in_tag = false;
        }
     }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多