php - HTML Purifier 有选择地吃掉特殊字符

标签 php javascript htmlpurifier

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

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

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

但是 HTMLPurifier 似乎正在破坏非 UTF-8 特殊字符,即转义()为简单 % 表达式的字符,例如 Ö,它转义为 %D6,而 smartquotes 转义为 %u2024 或其他字符并进入数据库那样。它会删除特殊字符和紧随其后的字符。

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

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

最佳答案

  1. textarea encoded with javascript escape()

escape isn't safe for non-ascii. Use escapeURIComponent

  1. passed via HTTP post

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

  1. decoded with PHP rawurldecode()

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

  1. 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/

相关文章:

php - 替换 WordPress 管理员中的 user-edit.php 页面

php - 如何创建一个 CRON 作业并将其设置为每 30 分钟或每小时一次,然后在 5 个间隔后取消它 php

javascript - D3 饼图分段划分

javascript - 查看动态页面

php - htmlpurifier 不允许 css 重要声明

php - HTMLPurifier 真的那么防弹吗?

php - 如何将 ContentType 添加到 AWS PHP SDK MultiPartUploader

php - MySQL在预先编写的脚本中插入语法错误

用于计算的 JavaScript 正则表达式

HTMLPurifier 允许 block 引用和带有引用的 ins 标签