猿问

如何使用 PHP 用 HTML 注释字符串

我正在尝试在字符串内的单词之间添加 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')


猛跑小猪
浏览 119回答 1
1回答
随时随地看视频慕课网APP
我要回答