程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP中實現支持顯示格式化的用戶輸入,php格式化

PHP中實現支持顯示格式化的用戶輸入,php格式化

編輯:關於PHP編程

PHP中實現支持顯示格式化的用戶輸入,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>", $output); 
$output = str_replace("", "<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>', $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('

', '<blockquote>', $output); 
$output = str_replace('

', '</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 bold 
- this is italics 
- 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] 

交錯文本



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

Conclusion 
結論 

這個討論提供安全顯示用戶輸入的方法,可以使用在下列程序中 

留言板 
用戶建議 
系統公告 
BBS系統   

詳細說明:http://php.662p.com/thread-343-1-1.html


PHP做一個網頁 支持用戶上傳圖片並顯示的 怎實現

前台:
<form action="php_insertpic.php" method="post" enctype="multipart/form-data" >
<input type="file" name="myFile" id="myFile" />
</form>
後台:
$pic_data = $_FILES["myFile"]["tmp_name"];
$pic_size = $_FILES["myFile"]["size"];
$filepic = addslashes(fread(fopen($pic_data, "rb"), $pic_size ));
後面再加上插入數據庫的語句就可以了,如:"insert into pic(id,picture) values(1,$filepic)"
顯示圖片:
header("Content-type:image/jpeg");
連接數據庫
$result=mysql_query("select * from pic where id=1");
$myrow=mysql_fetch_array($result);
echo ($myrow["picture"]);
 

PHP怎格式化數字?

PHP格式化數字的函數是number_format

我建議你去下載一個PHP的使用手冊,或者看網上的在線手冊也行。

www.itlearner.com/code/php/

關於他的用法如下:

語法: string number_format(float number, int [decimals], string [dec_point], string [thousands_sep]);

返回值: 字符串

函數種類: 數學運算

內容說明

本函數用來將浮點參數 number 格式化。若沒加參數 decimals 則返回的字符串只要整數部份,加了此參數才依參數指定的小數點位數返回。參數 dec_point 表示小數點的表示方式方法,默認值是 ".",若需要轉換成其它的小數點就可以在這個參數改掉。參數 thousands_sep 為整數部份每三位的分隔符號,默認值是 ","。本函數最特別的地方就是參數數目,最少要有一個,也就是欲格式化的字符串;也可以有二個或者四個參數,但不能用三個參數。治募?注意的是指定小數點的位數之後的數字直接捨棄,沒有四捨五入的情形。

使用范例

<?
$short_pi = "3.14159";
$my_pi = number_format($short_pi, 2);
echo $my_pi."\n"; // 3.14
$foo = 850017.9021;
$new_foo = number_format($foo, 3, ".", " ");
echo $new_foo."\n"; // 850 017.902
?>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved