我已经构建了一个允许将 HTML 存储在数据库中的 CMS。一切开始都很简单。我使用 htmlspecialchars 在文本区域中显示了 HTML,以防止它破坏表单。然后使用 html_specialchars_decode 将其保存回来。在有人将一些 HTML 粘贴到系统中而不是打字之前,这一切似乎都运行良好。此时它存储良好,但丢失了大部分空白,这意味着所有可爱的缩进都必须从头开始。
为了解决这个问题,我尝试在 utf-8 编码中指定所有内容,因为任何试图摆弄它的尝试似乎都会产生无效字符。
我在 PHP 标头中指定 utf-8
header('Content-Type: text/html; charset=utf-8');
我在我的 HTML 页面中指定了 utf-8
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
我在 HTML 表单中指定 utf-8
<form accept-charset="utf-8"
然后我读了发布的值(基本上)是这样的:
$Val = $_POST[$SafeFieldName];
我的理解是 PHP 在 utf-8 中做了所有事情,所以在这个阶段我有点惊讶我得到 gobbledegook - 除非我现在这样做:
$Val = utf8_decode($Val);
所以,在这个阶段——它起作用了——有点。我失去了所有可爱的缩进,但不是所有的空白。就好像有一些非 utf8 字符被剥离了。奇怪的是我正在使用 Chrome,但在 Firefox 中,它似乎很好
我想我现在只是在打结。有什么优雅的建议吗?我需要深入了解这一点,而不是仅仅破解它以使其工作。