On Feb 22, 2025, at 5:33 AM, Christian Grün <christian.gruen@gmail.com> wrote:

declare
  %rest:POST
  %rest:path('out')
  %rest:form-param('text', '{$text}')
  %output:method('html')
function local:out($text) {
  <html>Codepoints: { string-to-codepoints($text) }</html>
};


Indeed if you convert the text string to codepoints and the codepoints back to a string the newlines are present. I’m not sure understand why they don’t show up otherwise. 

My solution was to use javascript to insert <br /> tags into the form data before it gets submitted but your method doesn’t require any javascript. 

Thanks for your reply —Brian

—— Code -----

xquery version "3.1";

(: echo-post.xq: Return all data from an HTTP post to the caller. :)
module  namespace comments = "https://kennison.name/comments";

declare 
  %rest:path("/printenv")
  %rest:GET
  %rest:POST
  %output:method("html")
  %output:media-type("text/html")
function comments:echo-post(){
let $method  := request:method()
let $scheme  := request:scheme()
let $host    := request:hostname()
let $port    := request:port()
let $path    := request:path()
let $query   := request:query()
let $uri     := request:uri()
let $context := request:context-path()
let $address := request:address()
let $remote-host := request:remote-hostname()
let $remote-address := request:remote-address()
let $remote-port := request:remote-port()

return
<html>
<head>
  <title>Print Environ</title>
  <link rel="stylesheet" href="http://localhost/assets/css/jdoe.css"/>
  <link rel="stylesheet" href="http://localhost/assets/css/jdoe2.css"/>
  <style>
  <![CDATA[
  th, td {
    border: 1px solid black;
    padding: 8px;
    margin-left:10px;
  }
  thead th {
    width: 25%;
  }]]>
  </style>
</head>

<body>
  <section id="home">
    <article>
    <h1>Echo Request</h1>
      <p> These are the variables and parmaters available through the request.</p>

    <h3>Request Variables</h3>
      <table>
        <thead>
          <tr><th>Variable</th><th>Value</th></tr>
        </thead>
        <tbody>
          <tr><td>Method:</td><td>{$method}</td></tr>
          <tr><td>Scheme:</td><td>{$scheme}</td></tr>
          <tr><td>Host:</td><td>{$host}</td></tr>
          <tr><td>Port:</td><td>{$port}</td></tr>
          <tr><td>Path:</td><td>{$path}</td></tr>
          <tr><td>Query:</td><td>{$query}</td></tr>
          <tr><td>URI:</td><td>{$uri}</td></tr>
          <tr><td>Context:</td><td>{$context}</td></tr>
          <tr><td>Remote Host:</td><td>{$remote-host}</td></tr>
          <tr><td>Remote Addres:</td><td>{$remote-address}</td></tr>
      </tbody>
      </table>

    <h3>Request Parameters</h3>
      <table>
        <thead>
        <tr><th>Param</th><th>Value</th></tr>
        </thead>
        <tbody>
        {
        for $p in request:parameter-names()
        return
        <tr><td>{$p}</td><td>{request:parameter($p)}</td></tr>
        }
        </tbody>
        </table>

    <h3>Request Headers</h3>
      <table>
        <thead>
          <tr><th>Header</th><th>Value</th></tr>
        </thead>
        <tbody>
        {
        for $h in request:header-names()
        return
        <tr><td>{$h}</td><td>{request:header($h)}</td></tr>
        }
        </tbody>
      </table>

    <h3>Request Cookies</h3>
      <table>
        <thead>
        <tr><th>Cookie</th><th>Value</th></tr>
        </thead>
        <tbody>
        {
        for $c in request:cookie-names()
        return
        <tr><td>{$c}</td><td>{request:cookie($c)}</td></tr>
        }
        </tbody>
      </table>

    <h3>Request Attributes</h3>
      <table>
        <thead>
        <tr><th>Attribute</th><th>Value</th></tr>
        </thead>
        <tbody>
        {
        for $a in request:attribute-names()
        return
        <tr><td>{$a}</td><td>{request:attribute($a)}</td></tr>
        }
        </tbody>
      </table>
    </article>
  </section>
</body>
</html>
};

—— Comment Form -----

—— Printed Result ——
—— as you can see the newlines don’t show in results

Echo Request

These are the variables and parmaters available through the request.

Request Variables

VariableValue
Method:POST
Scheme:http
Host:127.0.0.1
Port:8080
Path:/printenv
Query:
URI:http://127.0.0.1:8080/printenv
Context:
Remote Host:127.0.0.1
Remote Addres:127.0.0.1

Request Parameters

ParamValue
uriripple
namekdkdk
emaildkdk@kdkdk
commentOne Two three

Request Headers

HeaderValue
Originhttp://localhost
Accepttext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Priorityu=0, i
User-AgentMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3 Safari/605.1.15
Refererhttp://localhost/dev-pages/comments/comment-form.html
X-Forwarded-Hostlocalhost
Connectionkeep-alive
Sec-Fetch-Sitesame-origin
Sec-Fetch-Destdocument
Host127.0.0.1:8080
Accept-Encodinggzip, deflate
Sec-Fetch-Modenavigate
Upgrade-Insecure-Requests1
X-Forwarded-For::1
Accept-Languageen-US,en;q=0.9
Content-Length84
X-Forwarded-ServerMB-15.local
Content-Typeapplication/x-www-form-urlencoded

Request Cookies

CookieValue

Request Attributes

AttributeValue