diff --git a/examples/custom-charset/package.json b/examples/custom-charset/package.json new file mode 100644 index 00000000..d9a8a33c --- /dev/null +++ b/examples/custom-charset/package.json @@ -0,0 +1,14 @@ +{ + "name": "custom-server", + "version": "1.0.0", + "scripts": { + "dev": "node server.js", + "build": "next build", + "start": "NODE_ENV=production node server.js" + }, + "dependencies": { + "next": "latest", + "react": "^16.0.0", + "react-dom": "^16.0.0" + } +} diff --git a/examples/custom-charset/pages/README.md b/examples/custom-charset/pages/README.md new file mode 100644 index 00000000..cc4798c6 --- /dev/null +++ b/examples/custom-charset/pages/README.md @@ -0,0 +1,34 @@ +[![Deploy to now](https://deploy.now.sh/static/button.svg)](https://deploy.now.sh/?repo=https://github.com/zeit/next.js/tree/master/examples/custom-server) + +# Custom server example + +## How to use + +### Download manually + +Download the example [or clone the repo](https://github.com/zeit/next.js): + +```bash +curl https://codeload.github.com/zeit/next.js/tar.gz/canary | tar -xz --strip=2 next.js-canary/examples/custom-charset +cd custom-charset +``` + +Install it and run: + +```bash +npm install +npm run dev +``` + +Deploy it to the cloud with [now](https://zeit.co/now) ([download](https://zeit.co/download)) + +```bash +now +``` + +## The idea behind the example + +The HTTP/1.1 specification says - if charset is not set in the http header then the browser defaults use ISO-8859-1. +For languages like Polish, Albanian, Hungarian, Czech, Slovak, Slovene, there will be broken characters encoding from SSR. + +You can overwrite Content-Type in getInitialProps. But if you want to handle it as a server side concern, you can use this as an simple example. diff --git a/examples/custom-charset/pages/index.js b/examples/custom-charset/pages/index.js new file mode 100644 index 00000000..0e0c34eb --- /dev/null +++ b/examples/custom-charset/pages/index.js @@ -0,0 +1,3 @@ +import React from 'react' + +export default () =>
áéíóöúü
diff --git a/examples/custom-charset/server.js b/examples/custom-charset/server.js new file mode 100644 index 00000000..bf8b0a43 --- /dev/null +++ b/examples/custom-charset/server.js @@ -0,0 +1,21 @@ +const { createServer } = require('http') +const { parse } = require('url') +const next = require('next') + +const port = parseInt(process.env.PORT, 10) || 3000 +const dev = process.env.NODE_ENV !== 'production' +const app = next({ dev }) +const handle = app.getRequestHandler() + +app.prepare() +.then(() => { + createServer((req, res) => { + const parsedUrl = parse(req.url, true) + res.setHeader('Content-Type', 'text/html; charset=iso-8859-2') + handle(req, res, parsedUrl) + }) + .listen(port, (err) => { + if (err) throw err + console.log(`> Ready on http://localhost:${port}`) + }) +})