2

针对 UTF-8 兼容的数据库使用 PHP。这是输入的方式。

  1. 用户在 textarea 中输入输入
  2. 用 javascript escape() 编码的文本区域
  3. 通过 HTTP post 传递
  4. 用 PHP rawurldecode() 解码
  5. 使用默认设置通过 HTMLPurifier
  6. 为 MySQL 转义并存储在数据库中

它以通常的方式出现,我在页面加载时运行 unescape() 。这是为了让人们可以直接从 Word 文档中复制和粘贴,并显示智能引号。

但是 HTMLPurifier 似乎正在破坏非 UTF-8 特殊字符,那些转义()到一个简单的 % 表达式的字符,比如 Ö,它转义到 %D6,而 smartquotes 转义到 %u2024 或其他东西并以这种方式进入数据库。它取出特殊字符和紧随其后的字符。

我需要在这个过程中改变一些东西。也许我需要改变很多事情。

我该怎么做才能不破坏特殊字符?

4

1 回答 1

5
  1. 用 javascript escape() 编码的文本区域

escape对于非ascii来说是不安全的。采用escapeURIComponent

  1. 通过 HTTP post 传递

我假设您使用XmlHttpRequest? 如果不是,请确保包含表单的页面以 utf-8 格式提供。

  1. 用 PHP rawurldecode() 解码

如果您通过 访问该值$_POST,则不应对其进行解码,因为这已经完成。这样做会弄乱数据。

  1. 为 MySQL 转义并存储在数据库中

确保您没有magic quotes打开。确保数据库将表存储为 utf-8(编码排序规则必须都是 utf-8)。确保 php 和 MySql 之间的连接是 utf-8 (使用set names utf8,如果你不使用 PDO)。

最后,确保再次输出字符串时页面以 utf-8 格式提供。

于 2009-05-14T17:53:26.370 回答