Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
什么要將HTML標(biāo)簽相關(guān)的字符串格式化?
HTML中的表單是收集用戶數(shù)據(jù)提交給服務(wù)器的主要途徑,如果處理不會被黑客利用成為攻擊服務(wù)器的入口。例如在用戶發(fā)布文章時,文章如果包括HTML標(biāo)記或者JavaScript頁面轉(zhuǎn)向的代碼,如果直接輸出的話會使頁面布局發(fā)生改變。這些代碼不做處理會被瀏覽器理解成有效代碼去解釋。所以在php中,對用戶提交的數(shù)據(jù)內(nèi)容一定要先處理。我們可以用PHP中HTML相關(guān)的字符串格式化函數(shù),有效控制HTML文本輸出。
函數(shù)nl2br()
在瀏覽器中輸出的字符串只能通過HTML的“
”標(biāo)記換行,也有很多人習(xí)慣使用“\n”作為換行符號,但是瀏覽器并不識別這個字符串換行符。即使有多行文本,在瀏覽器中顯示只有一行。nl2br()函數(shù)就是在字符串的每個新行“\n”之前插入HTML換行符“
”。比如:echo nl2br("first line,\n second line");。
函數(shù)htmlspecialchars()
如果不希望瀏覽器直接解析HTML標(biāo)記,需要把HTML標(biāo)記中的特殊字符轉(zhuǎn)換成HTML實體。例如,將"<"轉(zhuǎn)換為“<”,將“>”裝換為“>”。這樣HTML標(biāo)記瀏覽器就不會去解析,而是將HTML文本在瀏覽器中原樣輸出。php中提供的htmlspecialchars()函數(shù)就可以將一些預(yù)定義的字符轉(zhuǎn)換為HTML實體。此函數(shù)用在預(yù)防使用者提供的文字中包含了HTML的標(biāo)記,像是布告欄或是訪客留言板這方面的應(yīng)用。它可以轉(zhuǎn)換的字符:
“&”(和號)轉(zhuǎn)換為“&;”。
““”(雙引號)轉(zhuǎn)換為“";”。
“‘’”(單引號)換為“';”。
“<”(小于號)轉(zhuǎn)換為“<”。
">"(大于號)轉(zhuǎn)換為“>”。
函數(shù)htmlspecialchars()有三個參數(shù),第一個參數(shù)是必選函數(shù)。第二個參數(shù)是可選參數(shù),用來決定引號的轉(zhuǎn)換方式。(ENT_COMPAT轉(zhuǎn)換雙引號,保留單引號;ENT_QUOTES同時轉(zhuǎn)換兩種引號;ENT_NOQUOTES不對引號轉(zhuǎn)換。)第三個參數(shù)是可選的值,用于指定處理的字符串的字符集,默認(rèn)的字符集是“ISO8859-1”.其他的可以使用的合法字符集
htmlentities()函數(shù)
htmlentities()函數(shù)可以將所有非ASCII碼轉(zhuǎn)換為對應(yīng)的實體代碼。htmlentities()函數(shù)和htmlspecialchars()函數(shù)使用語法格式一致,單該函數(shù)可以轉(zhuǎn)義更多的HTML字符。
strip_tags函數(shù)
函數(shù)htmlspecialchars()可以將HTML中的標(biāo)記符號轉(zhuǎn)換為對應(yīng)的HTML實體,有時可以直接刪除用戶輸入的HTML標(biāo)簽,也是很有必要的。PHP提供的strip_tags函數(shù)默認(rèn)就是可以刪除字符串中的所有的HTML標(biāo)簽,也可以有選擇性的刪除一些HTML標(biāo)記。比如說公告欄或者訪客留言,比如說在論壇發(fā)布文章時,可以預(yù)留一些可以改變文字大小、顏色、粗體和斜體等HTML標(biāo)記,而刪除一些對頁面布局有影響的HTML標(biāo)記。
有一些函數(shù)文章中沒有提到,歡迎大家補(bǔ)充。每天學(xué)習(xí)一個知識點,每日寄語“滴水穿石,不是力量大,而是功夫深?!?/p>
?
者開始學(xué)習(xí)Javascript的時候,對模塊不太懂,不知道怎么導(dǎo)入模塊,導(dǎo)出模塊,就胡亂一通試
比如 import xx from 'test.js' 不起作用,就加個括號 import {xx} from 'test.js'
反正總是靠蒙,總有一種寫法是對的,其實還是沒有理解,還是不懂
尤其是在當(dāng)初寫 www.helloworld.net 網(wǎng)站的時候,一遇到這種問題,就懵逼了,尤其是引入第三方庫的時候
這種情況下更多,此篇文章也是為了怕以后忘記,自查用的,也希望能幫助更多的朋友,此篇文章只是針對ES6的模塊相關(guān)知識
我們知道,JS 模塊導(dǎo)入導(dǎo)出,使用 import , export 這兩個關(guān)鍵字
也就是說使用 export 導(dǎo)出一個模塊之后,其它文件就可以使用 import 導(dǎo)入相應(yīng)的模塊了
下面我們具體看看, import 和 export 到底怎么用?怎么導(dǎo)出模塊(比如變量,函數(shù),類,對象等)
//a.js 導(dǎo)出一個變量,語法如下
export var site = "www.helloworld.net"
//b.js 中使用import 導(dǎo)入上面的變量
import { site } from "/.a.js" //路徑根據(jù)你的實際情況填寫
console.log(site) //輸出: www.helloworld.net
上面的例子是導(dǎo)出單個變量,那么如何導(dǎo)出多個變量呢
//a.js 中定義兩個變量,并導(dǎo)出
var siteUrl="www.helloworld.net"
var siteName="helloworld開發(fā)者社區(qū)"
//將上面的變量導(dǎo)出
export { siteUrl ,siteName }
// b.js 中使用這兩個變量
import { siteUrl , siteName } from "/.a.js" //路徑根據(jù)你的實際情況填寫
console.log(siteUrl) //輸出: www.helloworld.net
console.log(siteName) //輸出: helloworld開發(fā)者社區(qū)
導(dǎo)出函數(shù)和導(dǎo)出變量一樣,需要添加{ }
//a.js 中定義并導(dǎo)出一個函數(shù)
function sum(a, b) {
return a + b
}
//將函數(shù)sum導(dǎo)出
export { sum }
//b.js 中導(dǎo)入函數(shù)并使用
import { sum } from "/.a.js" //路徑根據(jù)你的實際情況填寫
console.log( sum(4,6) ) //輸出: 10
js中一切皆對象,所以對象一定是可以導(dǎo)出的,并且有兩種寫法
使用 export default 關(guān)鍵字導(dǎo)出,如下
//a.js 中,定義對象并導(dǎo)出, 注意,使用export default 這兩個關(guān)鍵字導(dǎo)出一個對象
export default {
siteUrl:'www.helloworld.net',
siteName:'helloworld開發(fā)者社區(qū)'
}
//b.js 中導(dǎo)入并使用
import obj from './a.js' //路徑根據(jù)你的實際情況填寫
console.log(obj.siteUrl) //輸出:www.helloworld.net
console.log(obj.siteName) //輸出:helloworld開發(fā)者社區(qū)
同樣是使用export default 關(guān)鍵字,如下
//a.js 中定義對象,并在最后導(dǎo)出
var obj = {
siteUrl:'www.helloworld.net',
siteName:'helloworld開發(fā)者社區(qū)'
}
export default obj //導(dǎo)出對象obj
//b.js 中導(dǎo)入并使用
import obj from './a.js' //路徑根據(jù)你的實際情況填寫
console.log(obj.siteUrl) //輸出:www.helloworld.net
console.log(obj.siteName) //輸出:helloworld開發(fā)者社區(qū)
導(dǎo)出類與上面的導(dǎo)出對象類似,同樣是用 export default 關(guān)鍵字,同樣有兩種寫法
//a.js 中定義一個類并直接導(dǎo)出
export default class Person {
//類的屬性
site = "www.helloworld.net"
//類的方法
show(){
console.log(this.site)
}
}
//b.js 中導(dǎo)入并使用
//導(dǎo)入類
import Person from './a.js'
//創(chuàng)建類的一個對象person
let person = new Person()
//調(diào)用類的方法
person.show() //輸出:www.helloworld.net
//a.js 中定義一個類,最后導(dǎo)出
class Person {
//類的屬性
site = "www.helloworld.net"
//類的方法
show(){
console.log(this.site)
}
}
//導(dǎo)出這個類
export default Person
//b.js 中導(dǎo)入并使用
//導(dǎo)入類
import Person from './a.js'
//創(chuàng)建類的一個對象person
let person = new Person()
//調(diào)用類的方法
person.show() //輸出:www.helloworld.net
下面我們簡單總結(jié)一下
export與export default的區(qū)別
對于 import ,export , export default ,他們的用法上面的例子已經(jīng)很詳細(xì)的列出了,忘記的時候,可以當(dāng)作參考看看
最重要的還是要明白為什么要這么寫,實在不明白記住就行了。
網(wǎng)頁開發(fā)中,我們經(jīng)常需要將表格中的數(shù)據(jù)導(dǎo)出為CSV文件,以便進(jìn)行數(shù)據(jù)分析或共享。今天,我們就來分享一下如何通過JavaScript實現(xiàn)這個功能。具體實現(xiàn)步驟包括:提取表格數(shù)據(jù)、構(gòu)建CSV字符串、創(chuàng)建下載鏈接以及觸發(fā)下載操作。希望這個教程能幫你輕松實現(xiàn)表格數(shù)據(jù)導(dǎo)出功能!
首先,我們來看一下完整的代碼片段,然后再進(jìn)行分段介紹。
function extractTableData(tableId) {
const table = document.getElementById(tableId);
const data = [];
for (const row of table.rows) {
const rowData = [];
for (const cell of row.cells) {
rowData.push(cell.innerText.trim());
}
data.push(rowData);
}
return data;
}
function buildCsvString(data) {
return data.map(row => row.join(',')).join('\n');
}
function createDownloadLink(csvContent) {
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8' });
return URL.createObjectURL(blob);
}
function triggerDownload(url, filename) {
const link = document.createElement('a');
link.href = url;
link.download = filename;
link.click();
URL.revokeObjectURL(url);
}
function exportTableToCsv(tableId, filename) {
const tableData = extractTableData(tableId);
const csvContent = buildCsvString(tableData);
const downloadUrl = createDownloadLink(csvContent);
triggerDownload(downloadUrl, filename);
}
// 調(diào)用示例
exportTableToCsv('myTableId', 'exported_data.csv');
首先,我們需要通過 document.getElementById 選擇目標(biāo)表格。然后,我們使用 for...of 循環(huán)遍歷每一行 (<tr>) 和每一個單元格 (<td>),提取其中的文本內(nèi)容并去除多余的空格。
function extractTableData(tableId) {
const table = document.getElementById(tableId);
const data = [];
for (const row of table.rows) {
const rowData = [];
for (const cell of row.cells) {
rowData.push(cell.innerText.trim());
}
data.push(rowData);
}
return data;
}
在這個函數(shù)中,我們首先通過ID獲取目標(biāo)表格,然后遍歷每一行和每一個單元格,將單元格的文本內(nèi)容去除多余空格后存入一個數(shù)組,最后將這個數(shù)組推入 data 數(shù)組中。
接下來,我們創(chuàng)建一個函數(shù) buildCsvString,將提取的表格數(shù)據(jù)構(gòu)建成CSV字符串。我們使用逗號(,)連接每行的數(shù)據(jù),并用換行符(\n)連接每行。
function buildCsvString(data) {
return data.map(row => row.join(',')).join('\n');
}
在這個函數(shù)中,我們使用 map 方法遍歷每一行的數(shù)據(jù),將每行數(shù)據(jù)用逗號連接成字符串,然后再用換行符將所有行連接成一個完整的CSV字符串。
使用 Blob 對象創(chuàng)建一個表示CSV數(shù)據(jù)的blob,并將其類型設(shè)置為 text/csv。然后,使用 URL.createObjectURL 創(chuàng)建一個臨時的URL來指向這個blob。
function createDownloadLink(csvContent) {
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8' });
return URL.createObjectURL(blob);
}
在這個函數(shù)中,我們首先創(chuàng)建一個 Blob 對象,并將CSV內(nèi)容傳入。然后,使用 URL.createObjectURL 方法創(chuàng)建一個指向這個 Blob 對象的臨時URL。
最后,我們創(chuàng)建一個新的錨點 (<a>) 元素,并將其 href 屬性設(shè)置為臨時URL,download 屬性設(shè)置為我們想要的文件名(例如,"exported_data.csv")。然后,模擬點擊事件以啟動下載。
function triggerDownload(url, filename) {
const link = document.createElement('a');
link.href = url;
link.download = filename;
link.click();
URL.revokeObjectURL(url);
}
在這個步驟中,我們創(chuàng)建一個新的 <a> 元素,并設(shè)置其 href 和 download 屬性。然后,通過調(diào)用 click 方法模擬一次點擊事件,觸發(fā)文件下載。最后,使用 URL.revokeObjectURL 方法釋放這個臨時URL。
最后,我們將上述步驟整合到一個函數(shù)中,便于調(diào)用。
function exportTableToCsv(tableId, filename) {
const tableData = extractTableData(tableId);
const csvContent = buildCsvString(tableData);
const downloadUrl = createDownloadLink(csvContent);
triggerDownload(downloadUrl, filename);
}
// 調(diào)用示例
exportTableToCsv('myTableId', 'exported_data.csv');
通過以上步驟,你就可以輕松實現(xiàn)將表格數(shù)據(jù)導(dǎo)出為CSV文件的功能了。希望這篇教程對你有所幫助!如果有任何問題或建議,歡迎在評論區(qū)留言互動。
導(dǎo)出表格數(shù)據(jù)為CSV文件是一個非常實用的功能,不僅可以幫助我們方便地保存和分享數(shù)據(jù),還可以用于數(shù)據(jù)分析和處理。希望通過這篇文章,你能夠掌握這一技巧,并在實際項目中應(yīng)用。如果你覺得這篇文章對你有幫助,記得點贊、收藏并分享給更多的小伙伴!如果你有任何問題或需要進(jìn)一步的幫助,歡迎在評論區(qū)留言,我會及時回復(fù)你。謝謝閱讀!
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。