我正在尝试在字符串内的单词之间添加 HTML 标签(用 html 标签包装单词,即 HTML 注释)。HTML 标记应该写入的位置由偏移数组分隔,例如:
//array(Start offset, End offset) in characters
//Note that annotation starts in the Start offset number and ends before the End offset number
$annotationCharactersPositions= array(
0=>array(0,3),
1=>array(2,6),
2=>array(8,10)
);
因此,要使用以下 HTML 标记 ($tag) 注释以下 HTML 文本 ($source)。这是包装由 $annotationPositions 数组分隔的字符(不考虑源的 HTML 标记)。
$source="<div>This is</div> only a test for stackoverflow";
$tag="<span class='annotation n-$cont'>";
结果应如下(https://jsfiddle.net/cotg2pn1/):
charPos =--------------------------------- 01---------------------------- 2-------------------------------------------3------------------------------------------45-------67-----------------------------89-------10,11,12,13......
$output = "<div><span class='annotation n-1'>Th<span class='annotation n-2'>i</span></span><span class='annotation n-2'>s</span><span class='annotation n-2'> i</span>s</div> <span class='annotation n-3'>on</span>ly a test for stackoverflow"
如何编写下一个函数:
$cont=0;
$myAnnotationClass="placesOfTheWorld";
for ($annotationCharactersPositions as $position) {
$tag="<span class='annotation $myAnnotationClass'>";
$source=addHTMLtoString($source,$tag,$position);
$cont++;
}
考虑到在计算 $annotationCharactersPositions 数组中描述的字符时不得考虑输入字符串的 HTML 标签,并且必须考虑在 $source 文本中插入注释(即$tag)的每个以下注释的封装/注释。
整个过程的想法是,给定输入文本(可能包含也可能不包含 HTML 标签),将注释一组字符(属于一个或多个单词),以便结果将具有选定的字符(通过数组它定义了每个注释的开始和结束位置)由 HTML 标记包装,该标记可以通过可变数量的 html 属性(名称、类、id、数据-*)变化(a、span、mark)。此外,结果必须是格式良好的有效 HTML文档,以便如果在多个注释之间有任何注释,则 html 应相应地写入输出。
你知道任何图书馆或解决方案来做到这一点吗?也许 PHP DOMDocument 功能可能有用?¿但是如何将偏移量应用于 php DomDocument 函数?任何想法或帮助都受到欢迎。
注 1:输入文本是 UTF-8 原始文本,嵌入了任何类型的 HTML 实体 (0-n)。
注 2:输入标签可以是任何具有可变数量属性 (0-n) 的 HTML 标签。
注 3:初始位置必须是包含的,最终位置必须是不包含的。即 1º 注释在第 2 个字符(包括第 2 个字符 'i')之前开始并在第 6 个字符之前结束(不包括 6 个字符 's')