PO::unpoify( string $input_string ): string

In this article

Gives back the original string from a PO-formatted string

Parameters

$input_stringstringrequired
PO-formatted string

Return

string unescaped string

Source

public static function unpoify( $input_string ) {
	$escapes               = array(
		't'  => "\t",
		'n'  => "\n",
		'r'  => "\r",
		'\\' => '\\',
	);
	$lines                 = array_map( 'trim', explode( "\n", $input_string ) );
	$lines                 = array_map( array( 'PO', 'trim_quotes' ), $lines );
	$unpoified             = '';
	$previous_is_backslash = false;
	foreach ( $lines as $line ) {
		preg_match_all( '/./u', $line, $chars );
		$chars = $chars[0];
		foreach ( $chars as $char ) {
			if ( ! $previous_is_backslash ) {
				if ( '\\' === $char ) {
					$previous_is_backslash = true;
				} else {
					$unpoified .= $char;
				}
			} else {
				$previous_is_backslash = false;
				$unpoified            .= isset( $escapes[ $char ] ) ? $escapes[ $char ] : $char;
			}
		}
	}

	// Standardize the line endings on imported content, technically PO files shouldn't contain \r.
	$unpoified = str_replace( array( "\r\n", "\r" ), "\n", $unpoified );

	return $unpoified;
}

User Contributed Notes

You must log in before being able to contribute a note or feedback.