针对 UTF-8 兼容数据库使用 PHP。以下是输入的方式。
- 用户在文本区域中输入内容
- 使用 javascript escape() 编码的文本区域
- 通过 HTTP post 传递
- 使用 PHP rawurldecode() 解码
- 使用默认设置通过 HTMLPurifier
- 转义为 MySQL 并存储在数据库中
它以通常的方式出现,我在页面加载时运行 unescape() 。这是为了允许人们直接从 Word 文档复制和粘贴并显示智能引号。
但是 HTMLPurifier 似乎正在破坏非 UTF-8 特殊字符,即转义()为简单 % 表达式的字符,例如 Ö,它转义为 %D6,而 smartquotes 转义为 %u2024 或其他字符并进入数据库那样。它会删除特殊字符和紧随其后的字符。
我需要在这个过程中改变一些东西。也许我需要改变很多事情。
我该怎么做才能不让特殊字符被破坏?
最佳答案
- textarea encoded with javascript escape()
escape
isn't safe for non-ascii. Use escapeURIComponent
- passed via HTTP post
我假设您使用XmlHttpRequest
?如果不是,请确保包含表单的页面使用 utf-8。
- decoded with PHP rawurldecode()
如果您通过 $_POST
访问该值,则不应对其进行解码,因为这已经完成了。这样做会弄乱数据。
- escaped for MySQL and stored in database
确保您没有 magic quotes
打开。确保数据库将表存储为 utf-8(编码和排序规则必须都是 utf-8)。确保 php 和 MySql 之间的连接是 utf-8(如果不使用 PDO,请使用 set names utf8
)。
最后,再次输出字符串时请确保页面服务为utf-8。
关于php - HTML Purifier 有选择地吃掉特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/864644/