찾다
백엔드 개발PHP 튜토리얼在PHP中显示格式化的用户输入_PHP
在PHP中显示格式化的用户输入_PHPJun 01, 2016 pm 12:25 PM
output보여주다표시체재사용자입력하다

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

  没有过滤输出的危险


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


This is my comment.

<script language="javascript:

alert('Do something bad here!')">.


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


  只显示无格式的文本


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


  如<b>将转变为,这可以保证不会有意想不到的HTML标记在不适当的时候输出。

  这是一个好的解决方案,如果你的用户只关注没有格式的文本内容。但是,如果你给出一些可以格式化的能力,它将更好一些。


Formatting with Custom Markup Tags

用户自己的标记作格式化


  你可以提供特殊的标记给用户使用,例如,你可以允许使用[b]...[/b]加重显示,[i]...[/i]斜体显示,这样做简单的查找替换操作就可以了: $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标记。


请参看下面的源代码:

<?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]', '<b>', $output);

$output = str_replace('[/b]', '</b>', $output);


/* italics */

$output = str_replace('[i]', '<i>', $output);

$output = str_replace('[/i]', '</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);

}


?>


一些注意的地方:

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


  在经过转换之后,查找HTML代码将是替换过的,如双引号"将成为"


nl2br()函数将回车换行符转换为<br>标记,也要在htmlspecialchars()之后。


  当转换[links=""] 到 <a href="">, 你必须确认提交者不会插入javascript脚本,一个简单的方法去更改[link="javascript 到 [link=" javascript, 这种方式将不替换,只是将原本的代码显示出来。


outputlib.php


在浏览器中调用test.php,可以看到format_output() 的使用情况


正常的HTML标记不能被使用,用下列的特殊标记替换它:


- this is [b]bold[/b]

- this is [i]italics[/i]

- this is [link="http://www.phpbuilder.com"]a link[/link]

- this is [anchor="test"]an anchor, and a [link="#test"]link[/link] to the anchor


[p]段落

[pre]预先格式化[/pre]

[indent]交错文本[/indent]


这些只是很少的标记,当然,你可以根据你的需求随意加入更多的标记


Conclusion


  结论


  这个讨论提供安全显示用户输入的方法,可以使用在下列程序中


留言板

用户建议

系统公告

BBS系统

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
禁用Win11输入体验指南禁用Win11输入体验指南Dec 27, 2023 am 11:07 AM

最近有很多win11遇到了输入体验对话框总是闪烁,关也关不掉的问题,这其实是由于win11的默认系统服务和组件导致的,我们需要先禁用相关服务,再禁用输入体验服务就可以解决了,下面一起来试试看吧。win11输入体验怎么关闭:第一步,右键开始菜单,打开“任务管理器”第二步,依次找到“CTF加载程序”、“MicrosoftIME”和“服务主机:Textinputmanagementservice”三个进程,右键“结束任务”第三步,打开开始菜单,在上方搜索并打开“服务”第四步,在其中找到“Textinp

Windows 11 上缺少本地用户和组:如何添加它Windows 11 上缺少本地用户和组:如何添加它Sep 22, 2023 am 08:41 AM

“本地用户和组”实用程序内置于“计算机管理”中,可以从控制台访问,也可以独立访问。但是,一些用户发现Windows11中缺少本地用户和组。对于可以访问它的一些人来说,该消息显示,此管理单元可能不适用于此版本的Windows10。若要管理此计算机的用户帐户,请使用“控制面板”中的“用户帐户”工具。该问题已在上一次迭代Windows10中报告,并且通常是由于用户端的问题或疏忽引起的。为什么Windows11中缺少本地用户和组?您运行的是Windows家庭版,本地用户和组在专业版及更高版本上可用。活动

Windows输入遇到挂起或内存使用率高的问题[修复]Windows输入遇到挂起或内存使用率高的问题[修复]Feb 19, 2024 pm 10:48 PM

Windows的输入体验是一个关键的系统服务,负责处理来自各种人机接口设备的用户输入。它在系统启动时自动启动,在后台运行。然而,有时候这个服务可能会出现自动挂起或占用过多内存的情况,导致系统性能下降。因此,及时监控和管理这个进程是至关重要的,以确保系统的效率和稳定性。在这篇文章中,我们将分享如何解决Windows输入体验被挂起或导致内存使用率高的问题。Windows输入体验服务没有用户界面,但它与处理与输入设备相关的基本系统任务和功能有密切关联。它的作用是帮助Windows系统理解用户输入的每一

Win11 新版画图:一键移除背景实现抠图功能Win11 新版画图:一键移除背景实现抠图功能Sep 15, 2023 pm 10:53 PM

微软邀请Canary和Dev频道的WindowsInsider项目成员,测试和体验新版画图(Paint)应用,最新版本号为11.2306.30.0。本次版本更新最值得关注的新功能是一键抠图功能,用户只需要点击一下,就能自动消除背景,凸显画面主体,便于用户后续操作。整个步骤非常简单,用户在新版画图应用中导入图片,然后点击工具栏上“移除背景”(removebackground)按钮,就可以删除图片中的背景,用户也可以使用矩形来选择要消除背景的区域。

TranslucentTB不起作用:如何解决TranslucentTB不起作用:如何解决Jun 06, 2023 am 08:21 AM

TranslucentTB是寻求时尚简约桌面外观的Windows11爱好者广泛使用的工具,遇到了障碍。自从发布以来Windows11内部版本22621.1344(22H2)28年2023月日,TranslucentTB对大多数用户不起作用。此错误使用户努力应对其任务栏的有限自定义选项。用户在寻求克服这一挫折的解决方案时,挫败感显而易见。在最近的Windows11更新之后,TranslucentTB无法正常工作的问题已在多个在线平台上广泛报道,包括论坛和社交媒体。用户一直在分享他们的经验,拼命寻找

mysql 怎么修改hostmysql 怎么修改hostFeb 15, 2023 am 10:17 AM

mysql修改host的方法:1、通过“sudo service mysql stop”停掉mysql服务;2、以安全模式启动mysql,然后重置root密码;3、通过“update user set Host='%' where User='hive';”语句修改host即可。

修复: LSA 数据库包含内部不一致修复: LSA 数据库包含内部不一致Aug 04, 2023 am 09:17 AM

在使用驱动器映射和网络共享时,可能会出错很多问题。无线网络不如有线网络可靠。一直困扰用户的错误是本地安全机构数据库包含内部不一致。这会影响所有网络驱动器,用户无法访问或连接到它。该错误还会导致通过Samba到Linux和其他工作站的网络共享出现问题。在某些情况下,用户会看到消息,云端硬盘无法访问。您可能没有使用此网络资源的权限。本地安全机构数据库包含内部不一致。继续阅读以了解有关问题的所有信息!为什么无法访问网络驱动器?以下是网络驱动器突然停止工作的几个原因:缺少权限:通常,使用权限不足的帐户(

解决win11搜索栏输入问题解决win11搜索栏输入问题Dec 26, 2023 pm 12:07 PM

搜索栏是win11系统中非常好用的功能,可以帮助我们找到想要的设置、功能和服务等。但是有的朋友遇到了win11搜索栏无法输入的情况,我们可以在注册表中修改相关数据来解决,下面就跟着小编一起来解决一下吧。win11搜索栏无法输入怎么办1、首先我们可以按下键盘的“win+r”调出运行。2、然后在其中输入“regedit”回车确定打开注册表编辑器。3、然后在上方路径中输入“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Expl

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구