CakePHP 1.3:从文本中删除特定字符串的方法 - PHP函数或正则表达式

时间:2012-01-20 17:13:04

标签: regex cakephp

我将新闻数据库迁移到我正在创建的CakePHP新闻网站。我在显示迁移的新闻中的文本时遇到问题,因为在导入到DB的文本中,有一些HTML标记用于控制其中的文本。

有没有人可以帮我找到一种方法来删除这些文本,而不会影响这些新闻的布局?

基本上,我想完成以下任务:

  1. 创建一个我可以包含在ArticlesController
  2. 中的一次性使用功能
  3. 例如,函数名称为function fixtext(){...}
  4. 当我从http://mydomain.com/articles/fixtext中调用此函数时,Article.body列中所有受影响的行都将被扫描并修复。
  5. 我要删除的文字部分是font-size: 12pt; line-height: 115%;,位于<span>...</span>标记内。

    我有这样的想法,但我不确定如何实现它

    function fixtext(){
            $this->autoRender = 'FALSE';
    
            $articles = $this->Article->find(
                'all',
                array(
                    'fields' => array(
                            'Article.body',
                            'Article.id'
                    ),
                    'recursive' => -1
                )
            );
    
            foreach($articles as $article){
                  // Per Dunhamzzz suggestion
                  $text = str_replace('font-size: 12pt; line-height: 115%;', '', $article['Article']['body']);
                  $this->Article->id =  $article['Article']['id'];
                  $this->Article->saveField('Article.body', $text);
            }
    
            $this->redirect('/');
    }
    

    我不知道如何处理这个,以及最好的方法。

2 个答案:

答案 0 :(得分:2)

首先,我个人创建一个shell来完成这个,因为它是一个批处理作业,并且(根据所涉及的记录数量)你可能会达到Apache的请求超时限制。此外,它是一个很好的(有趣的)学习体验,可以扩展shell以执行未来的维护任务。

其次,使用(贪婪)正则表达式解析HTML是bad idea,因为它可能是格式错误的。使用HTML parser或使用简单的字符串替换更安全,但是,如果它是一个小的常规字符串,可以安全地进行模式匹配(即,您没有尝试删除结束{ {1}}标签),正则表达式可以工作。

像这样(未经测试):

</span>

答案 1 :(得分:1)

您可以使用简单的str_replace()来剪切该文本。

foreach($articles as $article){
    $this->Article->saveField(
        'Article.body' => str_replace('font-size: 12pt; line-height: 115%;', '', $article['Article']['body']),
        'Article.id' => $article['Article']['id']
    );
}

这是待定的,在每种情况下文本是相同的,否则你将需要一些更复杂的正则表达式(或可能多次str_replace()调用删除每个不良属性)。