original_string: public function encodeQ($str, $position = 'text')
      {
          // There should not be any EOL in the string
          $pattern = '';
          $encoded = str_replace(array("\r", "\n"), '', $str);
          switch (strtolower($position)) {
              case 'phrase':
                  // RFC 2047 section 5.3
                  $pattern = '^A-Za-z0-9!*+\/ -';
                  break;
              /** @noinspection PhpMissingBreakStatementInspection */
              case 'comment':
                  // RFC 2047 section 5.2
                  $pattern = '\(\)"';
                  // intentional fall-through
                  // for this reason we build the $pattern without including delimiters and []
              case 'text':
              default:
                  // RFC 2047 section 5.1
                  // Replace every high ascii, control, =, ? and _ characters
                  $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern;
                  break;
          }
          $matches = array();
          if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) {
              // If the string contains an '=', make sure it's the first thing we replace
              // so as to avoid double-encoding
              $eqkey = array_search('=', $matches[0]);
              if ($eqkey !== false) {
                  unset($matches[0][$eqkey]);
                  array_unshift($matches[0], '=');
              }
              foreach (array_unique($matches[0]) as $char) {
                  $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded);
              }
          }
          // Replace every spaces to _ (more readable than =20)
          return str_replace(' ', '_', $encoded);
      }
code: public function encodeQ($str, $position = 'text')
      {
          // There should not be any EOL in the string
          $pattern = '';
          $encoded = str_replace(array("\r", "\n"), '', $str);
          switch (strtolower($position)) {
              case 'phrase':
                  // RFC 2047 section 5.3
                  $pattern = '^A-Za-z0-9!*+\/ -';
                  break;
              /** @noinspection PhpMissingBreakStatementInspection */
              case 'comment':
                  // RFC 2047 section 5.2
                  $pattern = '\(\)"';
                  // intentional fall-through
                  // for this reason we build the $pattern without including delimiters and []
              case 'text':
              default:
                  // RFC 2047 section 5.1
                  // Replace every high ascii, control, =, ? and _ characters
                  $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern;
                  break;
          }
          $matches = array();
          if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) {
              // If the string contains an '=', make sure it's the first thing we replace
              // so as to avoid double-encoding
              $eqkey = array_search('=', $matches[0]);
              if ($eqkey !== false) {
                  unset($matches[0][$eqkey]);
                  array_unshift($matches[0], '=');
              }
              foreach (array_unique($matches[0]) as $char) {
                  $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded);
              }
          }
          // Replace every spaces to _ (more readable than =20)
          return str_replace(' ', '_', $encoded);
      }
code_tokens: public function encodeQ ( $ str , $ position = 'text' ) { // There should not be any EOL in the string $ pattern = '' ; $ encoded = str_replace ( array ( "\r" , "\n" ) , '' , $ str ) ; switch ( strtolower ( $ position ) ) { case 'phrase' : // RFC 2047 section 5.3 $ pattern = '^A-Za-z0-9!*+\/ -' ; break ; /** @noinspection PhpMissingBreakStatementInspection */ case 'comment' : // RFC 2047 section 5.2 $ pattern = '\(\)"' ; // intentional fall-through // for this reason we build the $pattern without including delimiters and [] case 'text' : default : // RFC 2047 section 5.1 // Replace every high ascii, control, =, ? and _ characters $ pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $ pattern ; break ; } $ matches = array ( ) ; if ( preg_match_all ( "/[{$pattern}]/" , $ encoded , $ matches ) ) { // If the string contains an '=', make sure it's the first thing we replace // so as to avoid double-encoding $ eqkey = array_search ( '=' , $ matches [ 0 ] ) ; if ( $ eqkey !== false ) { unset ( $ matches [ 0 ] [ $ eqkey ] ) ; array_unshift ( $ matches [ 0 ] , '=' ) ; } foreach ( array_unique ( $ matches [ 0 ] ) as $ char ) { $ encoded = str_replace ( $ char , '=' . sprintf ( '%02X' , ord ( $ char ) ) , $ encoded ) ; } } // Replace every spaces to _ (more readable than =20) return str_replace ( ' ' , '_' , $ encoded ) ; }
docstring: Encode a string using Q encoding.
  @link http://tools.ietf.org/html/rfc2047
  @param string $str the text to encode
  @param string $position Where the text is going to be used, see the RFC for what that means
  @access public
  @return string
docstring_tokens: Encode a string using Q encoding .