p The .Fn strvis and .Fn strvisx functions copy into .Fa dst a visual representation of the string .Fa src . The .Fn strvis function encodes characters from .Fa src up to the first .Dv NUL . The .Fn strvisx function encodes exactly .Fa len characters from .Fa src (this is useful for encoding a block of data that may contain .Dv NUL Ns 's ) . Both forms .Dv NUL terminate .Fa dst . The size of .Fa dst must be four times the number of characters encoded from .Fa src (plus one for the .Dv NUL ) . Both forms return the number of characters in dst (not including the trailing .Dv NUL ) .
p The functions .Fn svis , .Fn strsvis , and .Fn strsvisx correspond to .Fn vis , .Fn strvis , and .Fn strvisx but have an additional argument .Fa extra , pointing to a .Dv NUL terminated list of characters. These characters will be copied encoded or backslash-escaped into .Fa dst . These functions are useful e. g. to remove the special meaning of certain characters to shells.
p The encoding is a unique, invertible representation composed entirely of graphic characters; it can be decoded back into the original form using the .Xr unvis 3 or .Xr strunvis 3 functions.
p There are two parameters that can be controlled: the range of characters that are encoded (applies only to .Fn vis , .Fn strvis , and .Fn strvisx ) , and the type of representation used. By default, all non-graphic characters, except space, tab, and newline are encoded. (See .Xr isgraph 3 . ) The following flags alter this: l -tag -width VIS_WHITEX t Dv VIS_SP Also encode space. t Dv VIS_TAB Also encode tab. t Dv VIS_NL Also encode newline. t Dv VIS_WHITE Synonym for .Dv VIS_SP | .Dv VIS_TAB | .Dv VIS_NL . t Dv VIS_SAFE Only encode "unsafe" characters. Unsafe means control characters which may cause common terminals to perform unexpected functions. Currently this form allows space, tab, newline, backspace, bell, and return - in addition to all graphic characters - unencoded. .El
p (The above flags have no effect for .Fn svis , .Fn strsvis , and .Fn strsvisx . When using these functions, place all graphic characters to be encoded in an array pointed to by .Fa extra . In general, the backslash character should be included in this array, see the warning on the use of the .Dv VIS_NOSLASH flag below).
p There are four forms of encoding. All forms use the backslash character .Ql \e to introduce a special sequence; two backslashes are used to represent a real backslash, except .Dv VIS_HTTPSTYLE that uses .Ql $ . These are the visual formats: l -tag -width VIS_CSTYLE t (default) Use an .Ql M to represent meta characters (characters with the 8th bit set), and use caret .Ql ^ to represent control characters see
f ( Xr iscntrl 3 ) . The following formats are used: l -tag -width xxxxx t Dv \e^C Represents the control character .Ql C . Spans characters .Ql \e000 through .Ql \e037 , and .Ql \e177 (as .Ql \e^? ) . t Dv \eM-C Represents character .Ql C with the 8th bit set. Spans characters .Ql \e241 through .Ql \e376 . t Dv \eM^C Represents control character .Ql C with the 8th bit set. Spans characters .Ql \e200 through .Ql \e237 , and .Ql \e377 (as .Ql \eM^? ) . t Dv \e040 Represents .Tn ASCII space. t Dv \e240 Represents Meta-space. .El
p t Dv VIS_CSTYLE Use C-style backslash sequences to represent standard non-printable characters. The following sequences are used to represent the indicated characters: d -unfilled -offset indent .Li \ea Tn - BEL No (007) .Li \eb Tn - BS No (010) .Li \ef Tn - NP No (014) .Li \en Tn - NL No (012) .Li \er Tn - CR No (015) .Li \et Tn - HT No (011) .Li \ev Tn - VT No (013) .Li \e0 Tn - NUL No (000) .Ed
p When using this format, the nextc parameter is looked at to determine if a .Dv NUL character can be encoded as .Ql \e0 instead of .Ql \e000 . If .Fa nextc is an octal digit, the latter representation is used to avoid ambiguity. t Dv VIS_OCTAL Use a three digit octal sequence. The form is .Ql \eddd where .Em d represents an octal digit. t Dv VIS_HTTPSTYLE Use URI encoding as described in RFC 1808. The form is .Ql %xx where .Em x represents a hexadecimal digit. .El
p There is one additional flag, .Dv VIS_NOSLASH , which inhibits the doubling of backslashes and the backslash before the default format (that is, control characters are represented by .Ql ^C and meta characters as .Ql M-C ) . With this flag set, the encoding is ambiguous and non-invertible. .Sh SEE ALSO .Xr unvis 1 , .Xr vis 1 , .Xr unvis 3 .Rs .%A R. Fielding .%T Relative Uniform Resource Locators .%O RFC1808 .Re .Sh HISTORY The .Fa vis , .Fa strvis , and .Fa strvisx functions first appeared in x 4.4 . The .Fa svis , .Fa strsvis , and .Fa strsvisx functions appeared in .Nx 1.5 .