Tom Lane wrote: > Michael Parker <[EMAIL PROTECTED]> writes: > >>sub bytea_esc { >> my ($str) = @_; >> my $buf = ""; >> foreach my $char (split(//,$str)) { >> if (ord($char) == 0) { $buf .= "\\\\000"; } >> elsif (ord($char) == 39) { $buf .= "\\\\047"; } >> elsif (ord($char) == 92) { $buf .= "\\\\134"; } >> else { $buf .= $char; } >> } >> return $buf; >>} > > > Oh, I see the problem: you forgot to convert " to a backslash sequence. > > It would probably also be wise to convert anything >= 128 to a backslash > sequence, so as to avoid any possible problems with multibyte character > encodings. You wouldn't see this issue in a SQL_ASCII database, but I > suspect it would rise up to bite you with other encoding settings. > > regards, tom lane
Here is some code that applies Toms Suggestions: 38c39,41 < if (ord($char) == 0) { $buf .= "\\\\000"; } --- > if (ord($char) >= 128) { $buf .= "\\\\" . sprintf ("%lo", ord($char)); } > elsif (ord($char) == 0) { $buf .= "\\\\000"; } > elsif (ord($char) == 34) { $buf .= "\\\\042"; } But this begs the question, why not escape everything? schu ---------------------------(end of broadcast)--------------------------- TIP 5: don't forget to increase your free space map settings