Difference between revisions of "Ns startcontent"

From AOLserver Wiki
Jump to navigation Jump to search
m
 
(6 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
'''NAME'''
 
'''NAME'''
  
: ns_startcontent - Set connection to streaming state for streaming content via ns_write
+
: ns_startcontent - Configures connection for encoding non-binary content to be returned with ns_write
  
 
'''SYNOPSIS'''
 
'''SYNOPSIS'''
  
: '''ns_startcontent''' ''?-type content_type_and_enconding?''
+
: '''ns_startcontent''' ''?-type content-type_and_charset'' | -charset charset?''
  
 
'''DESCRIPTION'''
 
'''DESCRIPTION'''
  
: This command is used to set the current connection to streaming state and to provide the appropriate encoding
+
: This command is used to set the appropriate encoding prior to returning the content part of the response via [[ns_write]].
 +
 
 +
: If you write the headers to the client with ns_write instead of letting AOLserver do it (via ns_return or ns_respond), then AOLserver does not parse the content-type. You must explicitly tell it what charset to use immediately after you write the headers, by calling ns_startcontent in one of these forms:
 +
 
 +
* '''ns_startcontent'''
 +
: Tells AOLserver that you have written the headers and do not wish the content to be translated.
 +
* '''ns_startcontent''' -charset ''charset''
 +
: Tells AOLserver that you have written the headers and wish the following content to be translated to the specified charset.
 +
* '''ns_startcontent''' -type ''content-type_and_charset'' 
 +
: Tells AOLserver that you have written the headers and wish the following content to be translated to the charset specified by content-type, which should be the same value you sent to the client in the Content-Type header. If content-type starts with text/ and does not contain a charset parameter, AOLserver 4.0 uses the server default as configured in ns/parameters OutputCharset.  AOLserver 4.5 will actually throw an error if charset is not specified, so you may wish to redefine ns_startcontent in Tcl as listed in the notes below.
 +
 
  
 
'''EXAMPLES'''
 
'''EXAMPLES'''
 +
: From [http://dqd.com/~mayoff/encoding-doc.html Character Encoding in AOLserver]:
 +
# Assume japanesetext.html_sj is stored in Shift-JIS encoding.
 +
set fd [open japanesetext.html_sj r]
 +
fconfigure $fd -encoding shiftjis
 +
set html [read $fd [file size japanesetext.html_sj]]
 +
close $fd
 +
set charset [ns_choosecharset -preference {utf-8 shift-jis euc-jp iso-2022-jp}]
 +
set type "text/html; charset=$charset"
 +
ns_write "HTTP/1.0 200 OK
 +
Content-Type: $type
 +
\n"
 +
ns_startcontent -type $type
 +
ns_write $html
 +
 +
'''NOTES'''
 +
: In AOLserver 4.5, ns_startcontent's behavior has changed, so it may be convenient to reimplement ns_startcontent to be backward compatible as follows:
  
: ns_startcontent -type "text/html; charset=[ns_config ns/parameters OutputCharset iso-8859-1]"
+
  if {[ns_info version] >= 4.5} {
 +
    catch {rename ns_startcontent {}}
 +
    proc ns_startcontent {args} {
 +
    #
 +
    # Re-implement ns_startcontent in Tcl in AOLserver 4.5
 +
    # because the -type option no longer falls back to
 +
    # server's default encoding like it did in 4.0.
 +
    # Luckily, in 4.5, ns_adp_mimetype now just
 +
    # calls Ns_ConnSetType() which still does
 +
    # and works outside of adps
 +
    #
 +
        if {[llength $args]} {
 +
            switch [string range [lindex $args 0] 1 end] {
 +
                charset {
 +
                    ns_conn encoding [ns_encodingforcharset [lindex $args 1]]
 +
                }
 +
                type {
 +
                    ns_adp_mimetype [lindex $args 1]
 +
                }
 +
            }
 +
        }
 +
        # NaviServer removed write_encoded
 +
        catch {ns_conn write_encoded 1}
 +
        return ""
 +
    }
 +
  }
  
 
'''SEE ALSO'''
 
'''SEE ALSO'''
  
: [[ns_write]], [[ns_config]]
+
: [[ns_write]], [[ns_choosecharset]], [[ns_config]]

Latest revision as of 04:45, 11 October 2009

<manpage>ns_startcontent</manpage>

NAME

ns_startcontent - Configures connection for encoding non-binary content to be returned with ns_write

SYNOPSIS

ns_startcontent ?-type content-type_and_charset | -charset charset?

DESCRIPTION

This command is used to set the appropriate encoding prior to returning the content part of the response via ns_write.
If you write the headers to the client with ns_write instead of letting AOLserver do it (via ns_return or ns_respond), then AOLserver does not parse the content-type. You must explicitly tell it what charset to use immediately after you write the headers, by calling ns_startcontent in one of these forms:
  • ns_startcontent
Tells AOLserver that you have written the headers and do not wish the content to be translated.
  • ns_startcontent -charset charset
Tells AOLserver that you have written the headers and wish the following content to be translated to the specified charset.
  • ns_startcontent -type content-type_and_charset
Tells AOLserver that you have written the headers and wish the following content to be translated to the charset specified by content-type, which should be the same value you sent to the client in the Content-Type header. If content-type starts with text/ and does not contain a charset parameter, AOLserver 4.0 uses the server default as configured in ns/parameters OutputCharset. AOLserver 4.5 will actually throw an error if charset is not specified, so you may wish to redefine ns_startcontent in Tcl as listed in the notes below.


EXAMPLES

From Character Encoding in AOLserver:
# Assume japanesetext.html_sj is stored in Shift-JIS encoding.
set fd [open japanesetext.html_sj r]
fconfigure $fd -encoding shiftjis
set html [read $fd [file size japanesetext.html_sj]]
close $fd
set charset [ns_choosecharset -preference {utf-8 shift-jis euc-jp iso-2022-jp}]
set type "text/html; charset=$charset"
ns_write "HTTP/1.0 200 OK
Content-Type: $type
\n"
ns_startcontent -type $type
ns_write $html

NOTES

In AOLserver 4.5, ns_startcontent's behavior has changed, so it may be convenient to reimplement ns_startcontent to be backward compatible as follows:
 if {[ns_info version] >= 4.5} {
   catch {rename ns_startcontent {}}
   proc ns_startcontent {args} {
   #
   # Re-implement ns_startcontent in Tcl in AOLserver 4.5
   # because the -type option no longer falls back to
   # server's default encoding like it did in 4.0.
   # Luckily, in 4.5, ns_adp_mimetype now just
   # calls Ns_ConnSetType() which still does
   # and works outside of adps
   #
       if {[llength $args]} {
           switch [string range [lindex $args 0] 1 end] {
               charset {
                   ns_conn encoding [ns_encodingforcharset [lindex $args 1]]
               }
               type {
                   ns_adp_mimetype [lindex $args 1]
               }
           }
       }
       # NaviServer removed write_encoded
       catch {ns_conn write_encoded 1}
       return ""
   }
 }

SEE ALSO

ns_write, ns_choosecharset, ns_config