亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

在PHP中顯示格式化的用戶輸入

2024-09-04 11:32:21
字體:
來源:轉載
供稿:網友

如果你僅僅獲得用戶的輸入然后顯示它,你可能會破壞你的輸出頁面,如一些人能惡意地在他們提交的輸入框中嵌入javascript腳本:

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

這樣,即使用戶不是惡意的,也會破壞你的一些HTML的語句,如一個表格突然中斷,或是頁面顯示不完整。

只顯示無格式的文本

這是一個最簡單的解決方案,你只是將用戶提交的信息顯示為無格式的文本。使用htmlspecialchars()函數,將轉化全部的字符為HTML的編碼。

如<b>將轉變為<b>,這可以保證不會有意想不到的HTML標記在不適當的時候輸出。

這是一個好的解決方案,如果你的用戶只關注沒有格式的文本內容。但是,如果你給出一些可以格式化的能力,它將更好一些。

用戶自己的標記作格式化

你可以提供特殊的標記給用戶使用,例如,你可以允許使用[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.49028c.com"]a link[/link]
- this is [anchor="test"]an anchor, and a [link="#test"]link[/link] to the anchor

[p]段落

[pre]預先格式化[/pre]
        [indent]交錯文本[/indent]

這些只是很少的標記,當然,你可以根據你的需求隨意加入更多的標記

結論

這個討論提供安全顯示用戶輸入的方法,可以使用在下列程序中:留言板、用戶建議、系統公告、BBS系統。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线视频网| 国产精品欧美风情| 欧美亚洲成人精品| 久久亚洲成人精品| 日韩欧美中文字幕在线观看| 欧美黄色片免费观看| 在线播放亚洲激情| 欧美日韩国内自拍| 日韩**中文字幕毛片| 一级做a爰片久久毛片美女图片| www国产亚洲精品久久网站| 欧美极品美女视频网站在线观看免费| 久久网福利资源网站| 中文字幕综合在线| 欧美在线视频一区二区| 亚洲一区二区福利| 成人a视频在线观看| 欧美亚洲国产精品| 成人国产精品久久久| 国产精品丝袜久久久久久不卡| 亚洲精品欧美极品| 亚洲一区二区三区乱码aⅴ| 91精品在线观看视频| 热99精品里视频精品| 国产精品69精品一区二区三区| 91国内免费在线视频| 亚洲国产精品一区二区三区| 国内精品400部情侣激情| 九九久久久久久久久激情| 精品激情国产视频| 日韩电影中文字幕| 亚洲国产中文字幕久久网| 91九色视频导航| 日韩在线中文字幕| 91免费精品国偷自产在线| 国产精品久久久久久亚洲影视| 中文字幕av一区二区| 日韩av在线播放资源| 亚洲国产成人精品久久久国产成人一区| 欧美国产日韩一区二区在线观看| 久久精视频免费在线久久完整在线看| 视频在线观看一区二区| 中文字幕亚洲一区二区三区| 国产精品视频资源| 久久亚洲综合国产精品99麻豆精品福利| 亚洲人成自拍网站| 欧美一区第一页| 久久久久中文字幕2018| 色香阁99久久精品久久久| 成人a免费视频| 久久人人爽人人| 性欧美xxxx交| 欧美精品在线极品| 日韩视频一区在线| 91亚洲精品在线| 欧美专区在线视频| 国产精品电影一区| 91亚洲va在线va天堂va国| 欧美精品一区二区三区国产精品| 91亚洲va在线va天堂va国| 久久久久久久97| 国产精品私拍pans大尺度在线| 亚洲美女精品成人在线视频| 成人黄色免费片| 日韩精品极品视频免费观看| 亚洲高清在线观看| 欧美中文字幕精品| 国产精品久久电影观看| 成人两性免费视频| 91精品国产777在线观看| 91沈先生作品| 亚洲欧美日韩成人| 欧美性生交xxxxxdddd| 国产视频精品自拍| 久久久人成影片一区二区三区| 国产精品美腿一区在线看| 中文字幕av一区中文字幕天堂| 激情成人中文字幕| 亚洲激情久久久| 亚洲精品美女在线| 亚洲一区亚洲二区亚洲三区| 亚洲美女av在线播放| 久久综合国产精品台湾中文娱乐网| 久久久午夜视频| 一区国产精品视频| 国产精品自产拍在线观看| 自拍偷拍亚洲区| 欧美日韩亚洲一区二| 国产色综合天天综合网| 色悠悠久久久久| 欧美日韩亚洲视频一区| 久久国产精彩视频| 热草久综合在线| 成人网页在线免费观看| 国产偷亚洲偷欧美偷精品| 精品国产一区二区三区四区在线观看| 在线视频一区二区| 亚洲欧美一区二区精品久久久| 黑人极品videos精品欧美裸| 欧美三级免费观看| 亚洲成年人在线播放| 国产精品国模在线| 91老司机在线| 欧美日韩性视频| 欧美大片va欧美在线播放| 92看片淫黄大片欧美看国产片| 亚洲mm色国产网站| 欧美黄色片视频| 欧美日韩国产在线| 综合国产在线观看| 国产综合在线看| 欧美性xxxxxxxxx| 91亚洲一区精品| 美女视频黄免费的亚洲男人天堂| 成人444kkkk在线观看| 国内精品在线一区| 一本色道久久88精品综合| 热re99久久精品国产66热| 国产成人精品优优av| 欧美国产亚洲视频| 日韩欧美中文第一页| 国产一区二区色| 成人久久久久久久| 在线亚洲欧美视频| 成人写真视频福利网| 2018国产精品视频| 日本精品免费一区二区三区| 国产精品第一区| 成人欧美在线观看| 国产乱肥老妇国产一区二| 亚洲色图五月天| 琪琪亚洲精品午夜在线| 岛国av在线不卡| 人人澡人人澡人人看欧美| 成人国产精品免费视频| 亚洲精品美女免费| 亚洲综合自拍一区| 欧美日韩国产在线播放| 91久久精品国产91久久性色| 欧美视频裸体精品| 正在播放国产一区| 成人黄色影片在线| 国产精品一久久香蕉国产线看观看| 国产成人精品免费久久久久| 日本在线精品视频| 另类图片亚洲另类| 欧美自拍大量在线观看| 国产精品视频最多的网站| 97视频在线免费观看| 成人黄色大片在线免费观看| 亚洲午夜精品久久久久久性色| 欧美日韩中文字幕日韩欧美| 亚洲国产精品久久久| 色悠悠国产精品| 国产精品中文在线| 亚洲女人初尝黑人巨大| 亚洲国产精彩中文乱码av在线播放| 国产亚洲精品激情久久| 欧美大片在线影院| 欲色天天网综合久久| 亚洲视频一区二区| 亚洲free性xxxx护士白浆| 岛国精品视频在线播放| 国产精品一区二区三|