在PHP中解析字符串中的HTML标记

时间:2014-08-06 22:42:47

标签: php html

有没有办法可以通过PHP函数在PHP中解析带有HTML标签的字符串。

我无法写一个字符串,因为它没有在这里显示标签。

例如,这个HTML字符串: -

<(bold-tag)>The text<(/bold-tag)>

becomes

**The text**

3 个答案:

答案 0 :(得分:0)

strip_tags()可能是您正在寻找的内容:

http://php.net/manual/en/function.strip-tags.php

编辑:我不得不注意上述文件中的巨大警告:

  

由于strip_tags()实际上并未验证HTML,因此部分或损坏的标记可能会导致删除比预期更多的文本/数据。

这是一个好点......

答案 1 :(得分:0)

你可以使用str_replace()传递一系列标签及其替代品,如下所示:

$tags   = ['<b>','</b>'];
$replace= ['**','**'];
$string = '<b>Text</b>';
$string = str_replace($tags,$replace,$string);

答案 2 :(得分:0)

如果您想要更通用的解决方案,可以将strpossubstr结合使用。 strpos函数将给出字符串的位置,substr将允许您在标记之间提取字符串。

因此,对于HTML标记,您可以执行以下操作:

$right = substr($htmlTxt, strpos($htmlTxt, '>') + 1);    // After opening tag
$btwn = substr($right, 0, strpos($right, '</') + 1);     // Before the closing tag
$output = '**' . $btwn . '**';

如果你担心像破坏的标签之类的故障,那么你可以更明确地使这些职位变得明确,并添加几个这样的if语句:

$endLftTag = '>';
$endLftTagPos = strpos($htmlTxt, strpos($htmlTxt, $endLftTag) + strlen($endLftTag));

if ($endLftTagPos === FALSE) {
  // Not Found, probably return $htmlTxt unchanged
  ...
}

$beginRgtTag = '</';
$beginRgtTagPos = strpos($htmlTxt, strpos($htmlTxt, $beginRgtTag));

if ($endLftTagPos === FALSE) {
  // Opening Tag Not Found

  if ($beginRgtTagPos === FALSE) {
    // No Tag Found, return unchanged
    return $htmlTxt;
  } else {
    // Return the portion before the closing tag
    return substr($htmlTxt, 0, $beginRgtTagPos + 1);
  }
} else {
  // Opening Tag was Found

  if ($beginRgtTagPos === FALSE) {
    // Closing Tag Not Found, return everything after $endLftTagPos
    return substr($htmlTxt, $endLftTagPos);
  } else {
    // Both were found, return the string between them
    $strLen = $beginRgtTagPos - $endLftTagPos;
    return substr($htmlTxt, $endLftTagPos, $strLen);
  }
}