4

我有这样的:

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

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

我想要的是将 html 实体计数为 1 个字符,然后是 substr,因为我总是以破碎的 html 或文本末尾的一些晦涩字符结束。

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

谢谢

4

6 回答 6

5

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

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

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

(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)。

于 2010-04-17T04:45:46.603 回答
3

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

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

于 2010-04-17T05:19:36.120 回答
3

请注意,如果您使用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));

将输出:

  • 锻炼我的健身……在后院。
  • 努力健身。</li>
  • (空字符串)

解决方案

使用mb_substr().

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

将输出:

  • 在我的健身上工作……在
  • 工作在&rsquo;我的健身&hellip;
于 2015-05-19T10:28:28.973 回答
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;

}

?>
于 2012-12-01T11:13:37.387 回答
0

好吧,干净的方法只有一个:根本不使用实体。
没有单一的理由来替代实体字符串。它只能用于输出。
所以,首先 substr,然后编码。

于 2010-04-17T05:31:41.527 回答
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);
}
于 2018-03-07T20:35:42.800 回答