HTML Purifier选择性地吃特殊字符

时间:2009-05-14 17:26:49

标签: php javascript htmlpurifier

对符合UTF-8的数据库使用PHP。这是输入的输入方式。

  1. 输入到textarea的用户类型
  2. 用javascript escape()
  3. 编码的textarea
  4. 通过HTTP post传递
  5. 使用PHP rawurldecode()
  6. 解码
  7. 使用默认设置
  8. 传递HTMLPurifier
  9. 为MySQL转义并存储在数据库中
  10. 它以通常的方式出现,我在页面加载时运行unescape()。这是为了让人们直接从word文档中复制和粘贴,并显示智能引号。

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

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

    如果没有特殊字符被破坏,我该怎么做?

1 个答案:

答案 0 :(得分:5)

  
      
  1. 用javascript escape()
  2. 编码的textarea   

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

  
      
  1. 通过HTTP post传递
  2.   

我假设您使用XmlHttpRequest?如果没有,请确保包含表单的页面作为utf-8提供。

  
      
  1. 使用PHP rawurldecode()
  2. 解码   

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

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

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

最后,确保在再次输出字符串时将页面作为utf-8提供。