如何正确替换html实体?

时间:2010-04-17 04:15:36

标签: php html-entities

我喜欢这个:

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

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

我想要的是将html实体计为1个字符然后是substr,因为我总是在文本末尾使用破解的html或一些不起眼的字符。

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

由于

6 个答案:

答案 0 :(得分:4)

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

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

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

  3. (1)使用html_entity_decode()htmlentities()

    $s = html_entity_decode($mytext);
    $sub = substr($s, 0, 6);
    echo htmlentities($sub);
    

    (2)可能是这样的:

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

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

    • 任何不是符号的角色;或

    • &符号,后跟任何包括分号(即HTML实体)的内容。

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

答案 1 :(得分:3)


function encoded_substr($string, $param, $param2){
  $s = html_entity_decode($string);
  $sub = substr($s, $param, $param2);
  return htmlentities($sub);
}

在那里,我将cletus'代码复制到一个函数中。现在,您可以使用1行代码调用非常简单的3行函数。如果这不是“干净”,那么我很困惑“干净”意味着什么。

答案 2 :(得分:2)

如果您使用substr(),请注意某些字符会破坏建议的解码+编码。

实施例

$string=html_entity_decode("Workin’ on my Fitness…In the Backyard.");

echo $string;
echo substr($string,0,25);
echo htmlentities(substr($string,0,25));

将输出:

  • 在我的健身中工作......在后院。
  • 在我的健身上工作
  • (空字符串)

解决方案

使用mb_substr()

echo mb_substr($string,0,25);
echo htmlentities(mb_substr($string,0,25));

将输出:

  • 在我的健身中工作......在
  • 在我的健身’ In
  • 上工作…

答案 3 :(得分:1)

请尝试以下编码功能。

<?php

$mytext="that&#039;s really &quot;confusing&quot; and &lt;absolutly&gt; silly";

echo limit_text($tamil_var,6);

function limit_text($text,$limit){
   preg_match_all("/&(.*)\;/U", $text, $pat_array);
   $additional=0;

   foreach ($pat_array[0] as $key => $value) {
     if($key <$limit){$additional += (strlen($value)-1);}
   }
   $limit+=$additional;

   if(strlen($text)>$limit){
     $text = substr( $text,0,$limit );
     $text = substr( $text,0,-(strlen(strrchr($text,' '))) );
   }
   return $text;

}

?>

答案 4 :(得分:0)

嗯,干净的方法只有一个: 根本不使用实体。
没有一个理由可以替换有效的字符串。它只能用于输出 所以,先是substr,然后编码。

答案 5 :(得分:0)

这是对语法错误代码的更正,使用mb_substr来避免像html实体具有更少字符的意外,或者字符计数不能正常工作,在我的案例中Sábado成为Sá:

function encoded_substr($string, $param, $param2){
$s = html_entity_decode($string);
$sub = mb_substr($s, $param, $param2);
return htmlentities($sub);
}