【问题标题】:php substr in html domhtml dom中的php substr
【发布时间】:2011-11-23 09:59:47
【问题描述】:

如何在 HTML dom 中使用substr()?我想保留所有的 html 标签并缩短文本。

$str = '<div><a href="http://www.weather.com">Today is a nice day</a></div>';
$part1 = preg_replace("/<a(.*?)>(.*?)<\/a>/i",substr('\\2', 0,10),$str).'...';
$part2 = preg_replace("/<a(.*?)>(.*?)<\/a>/i",'\\2',$str);
echo str_replace($part2,$part1,$str);// nothing change
// I need <div><a href="http://www.weather.com">Today is a...</a></div>

【问题讨论】:

  • @Yoshi: 不是真的重复
  • @rabudde 怎么不是重复的?它处理截断文本节点而不破坏 html 结构?
  • 它应该把substr放在preg_replace之后。 $str = '&lt;div&gt;&lt;a href="http://www.weather.com"&gt;Today is a nice day&lt;/a&gt;&lt;/div&gt;'; $part1 = preg_replace("/&lt;a(.*?)&gt;(.*?)&lt;\/a&gt;/i",'${2}',$str); $part1 = substr($part1, 0,10).'...'; $part2 = preg_replace("/&lt;a(.*?)&gt;(.*?)&lt;\/a&gt;/i",'${2}',$str); echo str_replace($part2,$part1,$str);
  • @Yoshi:他想截断所有节点中的文本,“重复”希望在截断特定数量的字符后只纠正损坏的 HTML 语法。

标签: php regex substr


【解决方案1】:

它可能会更健壮一些,但这应该可以解决问题:

$str = '<div><a href="http://www.weather.com">Today is a nice day</a></div>';
echo shortenLinks($str);

function shorten($matches) {
   $maxlen = 10;
   $str = $matches[2];
   if (strlen($str) > $maxlen) {
      return "<" . $matches[1] . ">" . substr($str, 0, $maxlen) . "...<";
   } else {
      return $matches[0];
   }
}

function shortenLinks($str) {
   $pattern = "/<(a\s+.*)>([^<]+)</";
   return preg_replace_callback($pattern, "shorten", $str);
}

【讨论】:

  • @answered,解析错误:语法错误,$callback = function($matches) { 行中的意外 T_FUNCTION
  • 你用的是什么版本的php?
  • 谢谢,但为什么我不能在preg_replace 中使用简单的substr()
  • 好的,我解决了问题,把substr放在preg_replace之后,它可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 2012-05-29
  • 2018-12-04
  • 1970-01-01
相关资源
最近更新 更多