Difference between revisions of "Ns startcontent"

From AOLserver Wiki
Jump to navigation Jump to search
 
(4 intermediate revisions by the same user 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_encoding?''
+
: '''ns_startcontent''' ''?-type content-type_and_charset'' | -charset charset?''
  
 
'''DESCRIPTION'''
 
'''DESCRIPTION'''
  
: This command is used to set the current connection to streaming state, provides the appropriate encoding and indicates that the content part of the request is following. The content part is typically written via ns_write.
+
: 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