运行时以下代码,我的php脚本未运行且未显示错误消息。
<?php
$content = '<p>Hi </p> <p>The post <a rel="nofollow" href="http://sample.com/article/2016/09/05/%d8%a7%d9%84-%d8%ac%db%8c-%d9%82%d8%b5%d8%af-%d8%af%d8%a7%d8%b1%d8%af-%d8%b3%d8%b1%d9%85%d8%a7%db%8c%d9%87-%da%af%d8%b0%d8%a7%d8%b1%db%8c-%d8%b9%d8%b8%db%8c%d9%85%db%8c-%d8%b1%d8%a7-%d8%af%d8%b1/" ><b>ال جی قصد دارد سرمایه گذاری عظیمی را در حوزه رباتیک انجام دهد</b></a> appeared first on <a rel="nofollow" href="http://sample.com" ><b>بهنام</b></a>.</p>';
$content = preg_replace('/(The post)+(.)+(appeared first)+(.)+(\.)*/i', '', $content);
echo $content;
我想从“帖子”中删除所有内容,直到结束点 - 来自内容变量字符串。
我的目标是动态删除
The post <a rel="nofollow" href=""><b>ال جی قصد دارد سرمایه گذاری عظیمی را در حوزه رباتیک انجام دهد</b></a> appeared first on <a rel="nofollow" href="http://sample.com" ><b>بهنام</b></a>.
从内容结尾(RSS描述)。
我认为这个问题是因为$ content的值是unicode(波斯语)。
从内容变量中删除链接的href时输出为真。
答案 0 :(得分:1)
请检查此方法是否适合您。
$content = preg_replace('|<p>The post(.)*|', '', $content);
我的第一个解决方案:
$contentToReplace[] = '/The post/';
$contentToReplace[] = '/appeared first on/';
$content = preg_replace($contentToReplace, '', $content);
答案 1 :(得分:1)
请尝试
$content = '<p>Hi </p> <p>The post <a rel="nofollow" href=""><b>ال جی قصد دارد سرمایه گذاری عظیمی را در حوزه رباتیک انجام دهد</b></a> appeared first on <a rel="nofollow" href="http://sample.com" ><b>بهنام</b></a>.</p>';
$result = preg_replace(
array('/The post/', '/appeared first on/'),
array('', ''),
$content
);
echo $result;
答案 2 :(得分:0)
$content = preg_replace('/The post(.)*/i', '', $content);
满足你想要的东西。 .
表示除换行之外的所有内容,因此您不需要所有这些额外的漏洞。
答案 3 :(得分:0)
使用更优越的DOM
方法:
<?php
$data = <<<DATA
<p>Hi </p> <p>The post <a rel="nofollow" href="http://sample.com/article/2016/09/05/%d8%a7%d9%84-%d8%ac%db%8c-%d9%82%d8%b5%d8%af-%d8%af%d8%a7%d8%b1%d8%af-%d8%b3%d8%b1%d9%85%d8%a7%db%8c%d9%87-%da%af%d8%b0%d8%a7%d8%b1%db%8c-%d8%b9%d8%b8%db%8c%d9%85%db%8c-%d8%b1%d8%a7-%d8%af%d8%b1/" ><b>ال جی قصد دارد سرمایه گذاری عظیمی را در حوزه رباتیک انجام دهد</b></a> appeared first on <a rel="nofollow" href="http://sample.com" ><b>بهنام</b></a>.</p>
DATA;
$dom = new DOMDOcument();
$dom->loadHTML($data, LIBXML_HTML_NOIMPLIED);
$dom->removeChild($dom->doctype);
$xpath = new DOMXPath($dom);
$elements_to_be_removed = $xpath->query("//p[starts-with(text(), 'The post ')]");
foreach ($elements_to_be_removed as $element) {
$element->parentNode->removeChild($element);
}
// just to check
echo $dom->saveHTML();
# <p>Hi </p>
?>
这会删除文字以&#34开头的每个p
;帖子&#34;。
答案 4 :(得分:0)
正确的解决方案是:
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
override var selected: Bool {
didSet {
contentView.backgroundColor = selected ? UIColor.redColor(): UIColor.blueColor()
}
}
}
class ViewController: UIViewController {
@IBOutlet var collView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
// make a cell for each cell index path
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
// get a reference to our storyboard cell
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCollectionViewCell", forIndexPath: indexPath) as! MyCollectionViewCell
if(indexPath.row == 0) { //for first cell in the collection
cell.backgroundColor = UIColor.redColor()
} else {
cell.backgroundColor = UIColor.blueColor()
}
return cell
}
}
感谢wiktor-stribiżew