2

经过一番挖掘,我仍然没有接近这个。

我有一个由这个 php 生成的 html 字符串...

这会去除所有多个空格。

例如上面输出下面这个字符串,不包含其他节点,只是文本......

 1 Lorem ipsum 1.1 Dolor sit amet, consectetur adipiscing elit. 1.2 Nulla non felis enim, a lacinia erat. 1.3 Donec ullamcorper feugiat lobortis. 1.4 Vivamus congue libero ut augue consectetur ultricies vitae eget quam. 2 Suspendisse 2.1 Ultrices volutpat tempus. 2.2 Aenean ullamcorper porta lacus, ut vehicula tortor dapibus hendrerit. 2.3 Proin condimentum est eget arcu mollis consequat. 2.4 Ut malesuada posuere lobortis. 2.5 Suspendisse gravida adipiscing nunc, et vehicula nunc tincidunt nec. 3 Tincidunt 3.1 Sed eget porta ligula. 3.2 Morbi vitae augue in eros tincidunt tincidunt consequat interdum dui. 3.3 Phasellus ante velit, venenatis et dignissim eu, semper vitae lectus. 3.4 Maecenas feugiat adipiscing tortor, non porttitor sem condimentum luctus. 3.5 Curabitur pharetra gravida ornare. 3.6 Donec tortor erat, posuere in ullamcorper eget, posuere sit amet purus. 3.7 Duis feugiat sollicitudin odio, ac molestie nulla elementum non. 4 Vestibulum 4.1 Tempor lectus sit amet purus condimentum nec condimentum dui viverra. 4.2 Duis sodales molestie fermentum. 4.3 Maecenas euismod, lacus ut ullamcorper condimentum, erat felis sodales lectus, a sodales ipsum lectus eu lorem. 4.3 Vivamus ac rhoncus est.


我试图找出所有数字(1、1.2、1.3 等)并将它们包装在一个跨度中。

我尝试了php,但运气不佳...

$phrase  = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy   = array("pizza", "beer", "ice cream");

$newphrase = str_replace($healthy, "<span>".$yummy."</span>", $phrase);

echo $newphrase;

上面的 php 正在输出这个......You should eat Array, Array, and Array every day.


所以我想我可以试试jquery,但我不确定我是否正确地接近它,请我的代码......

var points = [' 1 ',' 1.1 ',' 1.2 ',' 1.3 ',' 1.4 ',' 2 '];

$("p").html(this.html().replace( points,'<span>' + points + '</span>'));

我想我偏离了轨道,但我真的找不到很多关于指向特定字符串位的内容。

我做了一个我的 jQuery 的小提琴...... http://jsfiddle.net/XmU6p/


我想与此同时,我仍将继续研究这个问题。但是,如果有人可以分享一些关于我哪里出错的指示,我将不胜感激。谢谢

4

6 回答 6

2

在这两种情况下,您实际上都需要遍历值数组并替换每个值。我对PHP不太熟悉,所以我用jQuery做了一个例子。试试这个:

var points = [' 1 ',' 1.1 ',' 1.2 ',' 1.3 ',' 1.4 ',' 2 '];
$.each(points, function(i, val) {
    var $p = $('p');
    $p.html($p.html().replace(val, '<span>' + val + '</span>'));
});

更新的小提琴

于 2013-01-27T14:43:01.783 回答
2

您也可以在 PHP 中执行此操作。您有一个数组到字符串的转换 ( "<span>$yummy</span>")。您需要循环$yummy添加跨度:

array_walk($yummy, function ($elem) { return "<span>$elem</span>"; });

然后你可以这样做:

$newphrase = str_replace($healthy, $yummy, $phrase);
于 2013-01-27T14:54:31.103 回答
0
foreach ($healthy as $key => $food) {
 $newphrase = str_replace($food,'<span>'.$yummy[$key].'</span>',$phrase);
}


echo $newphrase;
于 2013-01-27T14:56:55.713 回答
0

在 PHP 中你不需要循环或遍历,你可以使用 str_replace 或 preg_replace,两者都可以处理数组:

<?php
  $phrase  = "You should eat fruits, vegetables, and fiber every day.";
  $yummy   = array("<span>pizza</span>", "<span>beer</span>", "<span>ice cream</span>");

  // regex variant...
  $healthy = array('/fruits/i', '/vegetables/i', '/fiber/i');      
  $newphrase = preg_replace($healthy, $yummy, $phrase);
  echo $newphrase;

  // string variant...
  $healthy = array('fruits', 'vegetables', 'fiber');
  $newphrase = str_replace($healthy, $yummy, $phrase);
  echo $newphrase;
?>

我更喜欢正则表达式变体(preg_replace),以便在匹配方面具有更大的灵活性。

于 2013-01-27T14:57:34.910 回答
0

您的 PHP 示例失败的原因是它$yummy是一个数组,但"<span>"它是一个字符串。因此,该行将"<span>".$yummy."</span>"数组转换为 string "Array",然后将其他字符串添加到它的任一侧,并将其作为单个字符串返回。

由于您想要的是一个数组str_replace,因此您需要构造(例如使用foreach循环或array_map())一个包含每个元素的"<span>""</span>"周围的新数组 - 最终导致类似$yummyWithSpan = array("<span>pizza</span>", "<span>beer</span>", "<span>ice cream</span>");

另一种方法是使用preg_replace_callback(), 带有添加"<span>"and的回调函数"</span>",但是您需要了解正则表达式的工作原理,这可能是您想要了解的内容,也可能不是。

于 2013-01-27T14:57:41.473 回答
0

PHP:

$phrase  = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy   = array("pizza", "beer", "ice cream");

foreach ($healthy as $key => $value) {
  $phrase = str_replace($value, "<span>".$yummy[$key]."</span>",$phrase);
}

echo $phrase;

输出:

You should eat <span>pizza</span>, <span>beer</span>, and <span>ice cream</span> every day.
于 2013-01-27T14:59:44.097 回答