PHP中显示格式化的用户输入

2016-01-29 13:34 5 1 收藏

PHP中显示格式化的用户输入,PHP中显示格式化的用户输入

【 tulaoshi.com - PHP 】

你可以在这个页面下载这个文档附带的文件,也可以在文件下载中的字符处理中下载这个文档描述如何安全显示的有格式的用户输入。我们将讨论没有经过过滤的输出的危险,给出一个安全的显示格式化输出的方法。

没有过滤输出的危险

  如果你仅仅获得用户的输入然后显示它,你可能会破坏你的输出页面,如一些人能恶意地在他们提交的输入框中嵌入javascript脚本:

This is my comment.
<script language="javascript:
alert('Do something bad here!')".

  这样,即使用户不是恶意的,也会破坏你的一些HTML的语句,如一个表格突然中断,或是页面显示不完整。


只显示无格式的文本

  这是一个最简单的解决方案,你只是将用户提交的信息显示为无格式的文本。使用htmlspecialchars()函数,将转化全部的字符为HTML的编码。

  如<b将转变为<b,这可以保证不会有意想不到的HTML标记在不适当的时候输出。
这是一个好的解决方案,如果你的用户只关注没有格式的文本内容。但是,如果你给出一些可以格式化的能力,它将更好一些。

Formatting with Custom Markup Tags
用户自己的标记作格式化


  你可以提供特殊的标记给用户使用,例如,你可以允许使用...加重显示,...斜体显示,这样做简单的查找替换操作就可以了: $output = str_replace("[b]", "<b", $output);
$output = str_replace("[i]", "<i", $output);

  再作的好一点,我们可以允许用户键入一些链接。例如,用户将允许输入[link="url"]...[/link],我们将转换为<a href=""...</a语句

  这时,我们不能使用一个简单的查找替换,应该使用正则表达式进行替换:
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1"', $output);

ereg_replace()的执行就是:
查找出现[link="..."]的字符串,使用<a href="..." 替换它
[[:graph:]]的含义是任何非空字符,有关正则表达式请看相关的文章。


  在outputlib.php的format_output()函数提供这些标记的转换,总体上的原则是:
调用htmlspecialchars()将HTML标记转换成特殊编码,将不该显示的HTML标记过滤掉,
然后,将一系列我们自定义的标记转换相应的HTML标记。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/php/)

  请参看下面的源代码:
<?php


function format_output($output) {
/****************************************************************************
* Takes a raw string ($output) and formats it for output using a special
* stripped down markup that is similar to HTML
****************************************************************************/

$output = htmlspecialchars(stripslashes($output));

/* new paragraph */
$output = str_replace('[p]', '<p', $output);

/* bold */
$output = str_replace('', '<b', $output);
$output = str_replace('
', '</b', $output);

/* italics */
$output = str_replace('', '<i', $output);
$output = str_replace('
', '</i', $output);

/* preformatted */
$output = str_replace('[pre]', '<pre', $output);
$output = str_replace('[/pre]', '</pre', $output);

/* indented blocks (blockquote) */
$output = str_replace('[indent]', '<blockquote', $output);
$output = str_replace('[/indent]', '</blockquote', $output);

/* anchors */
$output = ereg_replace('[anchor="([[:graph:]]+)"]', '<a name="1"</a', $output);

/* links, note we try to prevent javascript in links */
$output = str_replace('[link="javascript', '[link=" javascript', $output);
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1"', $output);
$output = str_replace('[/link]', '</a', $output);

return nl2br($output);
}

?

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/php/)

一些注意的地方:

  记住替换自定义标记生成HTML标记字符串是在调用htmlspecialchars()函数之后,而不是在这个调用之前,否则你的艰苦的工作在调用htmlspec

来源:http://www.tulaoshi.com/n/20160129/1490660.html

延伸阅读
标签: 办公软件
在建立一个新的Word文件的时候,一般要使标题居中,设置字体、字号、字形等。我们可以把这些设置工作做成一种固定的格式,每次建立新文档时自动套用这种格式的标题。 在Word 2000中,新建一个Word文档,单击“工具”菜单中的“自动更正”命令。打开“自动更正”对话框,选择“键入时自动套用格式”选项卡,将“键入时自动应用”中的“...
标签: ASP
  如果有一个数字498.8573945,如何把它格式化成两位小数据呢?用过ASP的都知道,在VbScript里我们可以调用FormatNumber,即用FormatNumber(498.8573945,2)就可以输出:498.86。 由于JavaScript里没有这个函数,那么我们该如何实现呢?下面我就给出这个函数,大家可以把:<SCRIPT LANGUAGE=javascript src="http://img.jcwcn.com/...
一:大家可以去百度一下搜索一款U盘杀毒专家。 二:点击下载,然后安装U盘查杀软件。 三:将U盘插入电脑,打开U盘杀毒专家,选择需要扫描对象,一共有内存、本地硬盘、移动存储设备三个选项,推荐全选,然后点击开始扫描。 ...
标签: Android
安卓手机怎么格式化   虽然Android手机品牌众多,但基本操作大同小异,所以这里便以三星手机为例进行介绍。 1.在待机页面下,点击。 2.点击(或)。 3.向上滑动屏幕,点击。 4.点击(即格式化)。 5.点击。 6.点击。 完成上述操作后,待图老师手机自动重启后,手机就成功恢复出厂设...
标签: 电脑入门
单独的净利润数值能够告诉哪些供应商做得好,而波型图帮助识别数字后面的趋势:Seattle和Houston在夏季销售量下降,通常它们的利润一直在攀升,而Richmond除了最后一个月外销量一直不佳。 看看三个波型图的格式选项。选择波型图后,功能区中将出现波型图上下文选项卡,与选择图表或数据透视表相似。下面是波型图工具上下文选项卡中的格式选...

经验教程

285

收藏

78
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部