Regex заменить символы в данных - PullRequest
0 голосов
/ 13 сентября 2011

Я пытаюсь очистить некоторые ненужные данные от специальных символов (позволяя нескольким), но некоторые все еще проходят.Ранее я обнаружил фрагмент регулярного выражения, но не удаляет некоторые символы, например звездочки.

  $clean_body = $raw_text;

  $clean_title = preg_replace("/[^!&\/A-Za-z0-9_ ]/","", $clean_body);
  $clean_title = substr($clean_title, 0, 64);

  $clean_body = nl2br($clean_body);  

  if ($nid) {
    $node = node_load($nid);
    unset($node->field_category);
  } else {
    $node = new stdClass();
    $node->type = 'article';
    node_object_prepare($node); 
  }

  $split_title = str_split($clean_title);

  foreach ($split_title as $key => $character) {
    if ($key > 15) {
      if ($character == ' ' && !preg_match("/[^!&\/,.-]/", $split_title[$key - 1])) {
        $node->title = html_entity_decode(substr(strip_tags($clean_title), 0, $key - 1)) . '...';
      }
    }
  }

Первая часть пытается очистить текст в необработанном тексте от обычной пунктуации или буквенно-цифровых символов.Затем я делю заголовок на массив и ищу пробел.То, что я хочу сделать, это создать заголовок длиной не менее 15 символов, который усекается в пробеле (оставляя целые слова без изменений), не останавливаясь на знаке препинания.Это часть, с которой у меня возникают проблемы.

Некоторые названия все еще выходят как ***************** или ** HOW TO MAKE $$$$$$ BLOGGING **, когда первый заголовок не должен даже иметь *, а раздел должен быть HOW TO MAKE..., например.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2011

Ваша проблема (или, в любом случае, одна из них) заключается в следующей логике:

if ($key > 15) {
  if ($character == ' ' && !preg_match("/[^!&\/,.-]/", $split_title[$key - 1])) {
    $node->title = html_entity_decode(substr(strip_tags($clean_title), 0, $key - 1)) . '...';
  }
}

Вы устанавливаете $node->title, только если эти условия совпадают при итерации символов в массиве $split_title.

Что происходит, когда они не совпадают?$node->title не устанавливается (или перезаписывается? Вы не дали много контекста, поэтому я не могу сказать).

Используя это в качестве теста:

$clean_body = '** HOW TO MAKE $$$$$$ BLOGGING **';

Выможно увидеть, что эти условия не совпадают, поэтому $node->title не устанавливается (или не перезаписывается).

0 голосов
/ 13 сентября 2011

А как насчет "/[^!&\/\w\s]/ui"? Отлично работает на моей машине

...