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

2016-01-29 13:34 3 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标记。

(本文来源于图老师网站,更多请访问https://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);
}

?

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

一些注意的地方:

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

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

延伸阅读
对于很多电脑使用者来说,对c盘这个名称并不陌生,不仅很多软件会默认储存在c盘,而且c盘里面都是电脑重要的启动系统,可想而知c盘在电脑里面的重要性了。随着电脑的使用的次数变多,人们对于一些电脑问题也就越发疑惑了。就比如如果我想格式化c盘,那么命令符号有哪些呢?如果我格式化之后会产生什么样的问题呢?以下知识为你详细解答。 ...
标签: 办公软件
在建立一个新的Word文件的时候,一般要使标题居中,设置字体、字号、字形等。我们可以把这些设置工作做成一种固定的格式,每次建立新文档时自动套用这种格式的标题。 在Word 2000中,新建一个Word文档,单击“工具”菜单中的“自动更正”命令。打开“自动更正”对话框,选择“键入时自动套用格式”选项卡,将“键入时自动应用”中的“...
一:大家可以去百度一下搜索一款U盘杀毒专家。 二:点击下载,然后安装U盘查杀软件。 三:将U盘插入电脑,打开U盘杀毒专家,选择需要扫描对象,一共有内存、本地硬盘、移动存储设备三个选项,推荐全选,然后点击开始扫描。 ...
标签: 电脑入门
格式化是是把一张空白的盘划分为1个小区域然后在编号,这样提供计算机保存来读取数据。如果没有这些工具计算机就不知道怎么去读写硬盘的内容了。格式化这一概念原只应用于电脑硬盘,随着电子产品不断发展,很多存储器都用到了格式化这一名词,狭义的理解,就等于数据清零,删掉存储器内的所有数据,并将存储器恢复到初始状态。通常情况下格式化...
FinalData恢复格式化文件教程   格式化文件范围: 删除文件或文件夹并清空回收站 立刻删除暂不放在回收站的文件 删除感染病毒的文件 格式化了有着重要数据的硬盘分区 具体恢复步骤: 第1步:在 FINALDATA 3.0 Wizard 界面上,点击按钮。 第2步:点击 第3步:搜索需要恢复文件的硬盘分...

经验教程

95

收藏

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