如何正确 substr html 实体?

Emi*_*ily 4 php html-entities

我有这样的:

$mytext="that's really "confusing" and <absolutly> silly";
echo substr($mytext,0,6);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输出将是:that&#而不是that's

我想要的是将 html 实体计算为 1 个字符,然后是 substr,因为我总是在文本末尾得到损坏的 html 或一些晦涩的字符。

请不要建议我先 html 解码然后 substr 然后编码它,我想要一个干净的方法:)

谢谢

cle*_*tus 5

有两种方法可以做到这一点:

  1. 您可以解码 HTML 实体,substr()然后进行编码;或者

  2. 您可以使用正则表达式。

(1) 用途html_entity_decode()htmlentities()

$s = html_entity_decode($mytext);
$sub = substr($s, 0, 6);
echo htmlentities($sub);
Run Code Online (Sandbox Code Playgroud)

(2) 可能是这样的:

if (preg_match('!^([^&]|&(?:.*?;)){0,5}!s', $mytext, $match)) {
  echo $match[0];
}
Run Code Online (Sandbox Code Playgroud)

这就是说:从字符串的开头找到最多 5 次出现的前面的表达式。前面的表达式是:

  • 任何不是&符号的字符;或者

  • 一个 & 号,后跟任何直到并包括分号的内容(即 HTML 实体)。

这并不完美,所以我赞成(1)。