我有一组标点字符:
$punctuation = array('.', '!', ';', '?');
字符限制变量:
$max_char = 55;
带有HTML的字符串:
$string = 'This is a test string. With <a href="http://google.com">HTML</a>.';
如何使用$max_chr
数组中的某个字符作为“键”将此字符串拆分为最大$punctuation
个字符?
所以基本上字符串应该在最接近的标点字符处拆分,但不在HTML标记定义/属性内部(如果拆分发生在标记内容中并且标记保持未闭合并不重要 - 因为我正在检查对于未封闭的标签,以后)。
答案 0 :(得分: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;
}
}