首页 » 建站技术 » PHP 技术 » 浏览内容

显示格式化的用户输入


2006-12-09 09:48:26 7,184 0 发表评论 字体: 作者:C.K.
标签: 学习笔记

体验版 88 元,个人版 128 元,多用户版 288元个人版160元升级到多用户版。

From:http://www.vuu.cn/article/vuu.asp?item=14421

  此文档描述了如何根据用户的输入安全地显示格式化输出。我们将讨论显示未经过滤的输出的危险性,然后提出一个显示格式化输出的安全的方法。

未过滤输出的危险性

  如果你只是简单地得到用户的输入,并且原封不动地将它们显示出来,那样就可能会破坏你的网页。例如,某些别有用心的人可能在他们的注解中嵌入javascript脚本,如:

  这是我的注解。

<script language="javascript: alert('在这里做一些不好的事情!')">

  即使用户没有什么不良企图,他们也有可能碰巧输入了一些html代码,破坏页面的布局。例如,你在一个表格中显示用户的输入,当用户输入中包括了一个错误嵌套的

</table>

标记,页面显示就被破坏了。

只显示无格式文本

  最简单的解决方法应该是只在注解中显示无格式文本。使用htmlspecialchars() 函数,可以将所有的特殊字符转换成html特殊字符。例如将变成

&lt;b&gt;

,转换为html标记的文本表示。这就保证了在注解中没有html标记,从而不会产生不希望的输出。

  如果你的访客不介意只是输入无格式文本,这个方法就很好,但是如果你能够提供给他们一些格式化的功能则就更好了。

使用自定义标记进行格式化

  为了实现格式化输出可以为用户提供自已定义的特殊标记。比如可以允许用户使用

[b]...[/b]

来表示黑体设置,…表示斜体设置。可以对它们进行简单的字符串替换操作:

$output = str_replace("[b]", "<b>", $output);
  • $output = str_replace("[i]", "<i>", $output);
  •   做得再好一点,允许用户可以加入链接。例如,用户可以在

    [link="url"]...[/link]

    中输入链接,我们将把它转变成合适的

    语句。这里不能只使用简单地字符替换,需要使用正则表达式:

    $output = ereg_replace('\[link="([[:graph:]]+)"\]', '<a href="\\1">', $output);

      如果你对ereg_replace()函数不熟悉的话,这句话的意思就是:查找所有
    [link=”…”]
    出现的地方,将其替换成为

    <a href="...">

    [[:graph:]]表示任意非空字符。请查阅手册中的关于正则表达式的详细内容。

    引用
    ereg_replace
    (PHP 3, PHP 4, PHP 5)

    ereg_replace — 替换正则表达式
    说明
    string ereg_replace ( string pattern, string replacement, string string )

    本函数在 string 中扫描与 pattern 匹配的部分,并将其替换为 replacement。

    返回替换后的字符串。(如果没有可供替换的匹配项则会返回原字符串。)

    如果 pattern 包含有括号内的子串,则 replacement 可以包含形如 \\digit 的子串,这些子串将被替换为数字表示的的第几个括号内的子串;\\0 则包含了字符串的整个内容。最多可以用九个子串。括号可以嵌套,此情形下以左圆括号来计算顺序。
    如果未在 string 中找到匹配项,则 string 将原样返回。

    在outputlib.php中的format_output()函数提供了对这些特殊标记的处理,同时也提供了对其它几个特殊标记的处理。通用的算法是:
    对输出文本调用htmlspecialchars()函数来转换所有的特殊字符为html的特殊字符 对自定义的标记系统地进行字符串替换或正则式替换

    网站统计 Statistics

    • 创建时间: 2005年1月3日 距今5062 天
    • 日志总数: 2461
    • 评论总数: 630
    • 标签总数: 654
    • 链接总数: 273
    • 最后更新: 2018-8-31 17:57:04
    • 您是本站第 14144360 位访客

    广告区 Guǎng Gào