Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Regex替换数据中的字符_Php_Regex_Data Cleaning - Fatal编程技术网

Php Regex替换数据中的字符

Php Regex替换数据中的字符,php,regex,data-cleaning,Php,Regex,Data Cleaning,我试图清理一些特殊字符的废弃数据(允许一些),但有些仍然可以通过。我在前面找到了一个正则表达式片段,但没有删除一些字符,比如星号 $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);

我试图清理一些特殊字符的废弃数据(允许一些),但有些仍然可以通过。我在前面找到了一个正则表达式片段,但没有删除一些字符,比如星号

  $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个字符长的标题,并在不停止标点符号的情况下截断一个空格(保留完整的单词)。这是我遇到麻烦的部分

有些标题仍然是
************
**如何制作$$$$$$BLOGGING**
,而第一个标题甚至不应该有
*
,而该部分应该是
如何制作…

“/[^!&\/\w\s]/ui”
? 在我的机器上运行正常

您的问题(或者,无论如何,其中之一)是以下逻辑:

if ($key > 15) {
  if ($character == ' ' && !preg_match("/[^!&\/,.-]/", $split_title[$key - 1])) {
    $node->title = html_entity_decode(substr(strip_tags($clean_title), 0, $key - 1)) . '...';
  }
}
在迭代
$split\u title
数组中的字符时,如果这些条件匹配,则仅设置
$node->title

当它们不匹配时会发生什么<代码>$node->title未设置(或被覆盖?您没有提供太多上下文,所以我不知道)

将此用作测试:

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

您可以看到这些条件不匹配,因此
$node->title
不会被设置(或覆盖)。

使用wordwrap截断字符串如何?我不想在标题中添加换行符,只需截断它即可。听起来这个函数会把它弄坏吗?我觉得你的正则表达式很好。在调用
preg\u replace
后,您是否尝试过立即检查
$clean\u title
?我认为问题出在你的PHP上,但我已经有一段时间没有使用PHP了,所以我不是专家。