code: public function actionCheckGuide($directory = null)
      {
          if ($directory === null) {
              $directory = \dirname(\dirname(__DIR__)) . '/docs';
          }
          if (is_file($directory)) {
              $files = [$directory];
          } else {
              $files = FileHelper::findFiles($directory, [
                  'only' => ['*.md'],
              ]);
          }
  
          foreach ($files as $file) {
              $content = file_get_contents($file);
              $chars = preg_split('//u', $content, null, PREG_SPLIT_NO_EMPTY);
  
              $line = 1;
              $pos = 0;
              foreach ($chars as $c) {
                  $ord = $this->unicodeOrd($c);
  
                  $pos++;
                  if ($ord == 0x000A) {
                      $line++;
                      $pos = 0;
                  }
  
                  if ($ord === false) {
                      $this->found('BROKEN UTF8', $c, $line, $pos, $file);
                      continue;
                  }
  
                  // http://unicode-table.com/en/blocks/general-punctuation/
                  if (0x2000 <= $ord && $ord <= 0x200F
                   || 0x2028 <= $ord && $ord <= 0x202E
                   || 0x205f <= $ord && $ord <= 0x206F
                      ) {
                      $this->found('UNSUPPORTED SPACE CHARACTER', $c, $line, $pos, $file);
                      continue;
                  }
                  if ($ord < 0x0020 && $ord != 0x000A && $ord != 0x0009 ||
                      0x0080 <= $ord && $ord < 0x009F) {
                      $this->found('CONTROL CHARARCTER', $c, $line, $pos, $file);
                      continue;
                  }
  //                if ($ord > 0x009F) {
  //                    $this->found("NON ASCII CHARARCTER", $c, $line, $pos, $file);
  //                    continue;
  //                }
              }
          }
      }
docs: Check guide for non-printable characters that may break docs generation.
  
  @param string $directory the directory to check. If not specified, the default
  guide directory will be checked.