Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,038

HOME > Client Script Forum > สอบถามวิธีกำหนดค่า HTML ที่ encode แล้วลงใน input หรือ textarea


[PHP] สอบถามวิธีกำหนดค่า HTML ที่ encode แล้วลงใน input หรือ textarea

 
Topic : 134475



โพสกระทู้ ( 4,765 )
บทความ ( 8 )



สถานะออฟไลน์



ผมมีไฟล์บันทึกข้อมูลดังนี้
Code (PHP)
01.<?php
02.session_start();
03. 
04.if ($_POST) {
05.    // สำหรับบันทึก
06.    $name = htmlspecialchars(trim($_POST['name']), ENT_QUOTES);
07.    $_SESSION['name'] = $name;
08.    $output = [];
09.    $output['saved'] = true;
10.    $output['name'] = $name;
11.     
12.    header('Content-Type: application/json; charset=utf-8');
13.    echo json_encode($output);
14.    exit();
15.}
16. 
17. 
18.if (isset($_SESSION['name'])) {
19.    // สำหรับ ajax ดึงไปแสดง
20.    $name = $_SESSION['name'];
21.    $output = [];
22.    $output['name'] = $name;
23. 
24.    header('Content-Type: application/json; charset=utf-8');
25.    echo json_encode($output);
26.    exit();
27.}

ชื่อไฟล์ save.php





อันนี้เป็นไฟล์ php สำหรับทดสอบทำงานปกติธรรมดาโดยยังไม่มี js ajax
Code (PHP)
01.<?php
02.session_start();
03. 
04.if ($_POST) {
05.    $name = htmlspecialchars(trim($_POST['name']), ENT_QUOTES);
06.    $_SESSION['name'] = $name;
07.    header('Location: test01.php', true, 302);
08.    exit();
09.}
10. 
11.if (isset($_SESSION['name'])) {
12.    $name = $_SESSION['name'];
13. 
14.    echo 'saved result: ' . $name . '<br>' . PHP_EOL;
15.}
16.?>
17.<form method="post" action="save.php">
18.    <input type="text" name="name" value="<?php if (isset($name)) {echo $name;} ?>" maxlength="50">
19.    <br>
20.    <button type="submit">Save</button>
21.</form>
22.<p>Normal php save/display.</p>

ชื่อไฟล์ test01.php

ไฟล์ข้างบนนี้ ถ้ากรอกชื่อลงไปว่า <p>p</p> แล้วบันทึกแล้ว reload มันก็จะแสดงออกมาใน input ถูกต้องเหมือนตอนที่พิมพ์เลย แต่ว่าเมื่อเป็น JS (ด้านล่าง)...





Code (JavaScript)
01.<div id="saved-result-text" style="display:none;">
02.    saved result: <span id="saved-result"></span>
03.</div>
04. 
05.<form id="saveForm" method="post">
06.    <input id="name" type="text" name="name" value="" maxlength="50">
07.    <br>
08.    <button type="submit" onclick="return ajaxSave();">Save</button>
09.</form>
10.<p>Normal JS save/display.</p>
11. 
12. 
13.<script>
14.    function ajaxSave() {
15.        let formData = new FormData(document.getElementById('saveForm'));
16.        let xhr = new XMLHttpRequest();
17. 
18.        xhr.onreadystatechange = function() {
19.            if (this.readyState == 4 && this.status == 200) {
20.                let response = JSON.parse(this.response);
21.                if (response.saved === true) {
22.                    window.location.reload();
23.                }
24.            }
25.        };
26. 
27.        xhr.open('POST', 'save.php');
28.        xhr.send(formData);
29. 
30.        return false;
31.    }
32. 
33. 
34.    document.addEventListener('DOMContentLoaded', function() {
35.        let xhr = new XMLHttpRequest();
36. 
37.        xhr.onreadystatechange = function() {
38.            if (this.readyState == 4 && this.status == 200) {
39.                let response = JSON.parse(this.response);
40.                if (response && response.name) {
41.                    document.getElementById('saved-result-text').style = '';
42.                    document.getElementById('saved-result').innerHTML = response.name;
43.                    document.getElementById('name').value = response.name;
44.                }
45.            }
46.        };
47. 
48.        xhr.open('GET', 'save.php');
49.        xhr.send();
50. 
51.        return false;
52.    }, false);
53.</script>

ชื่อไฟล์ test02.php
ไฟล์นี้ เมื่อบันทึกชื่อว่า <p>p</p> แล้ว reload ในช่อง input จะกลับกลายเป็น &lt;p&gt;p&lt;/p&gt; ซึ่งไม่ตรงตามตอนที่พิมพ์ลงไป
ทำยังไงให้มันแสดงผลให้ถูกต้องครับ?
มีวิธีอื่นนอกจาก decode มันไหม? เพราะรู้สึกใน php ไม่ต้องทำอะไรเลยตอนแสดงผล และการ decode มันจะเสี่ยงเกิดช่องโหว่ xss หรือไม่?



Tag : JavaScript, Ajax

Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2019-11-07 10:50:51 By : mr.v View : 1048 Reply : 1
 

 

No. 1



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ต้อง decode ครับ เพราะใช้ htmlspecialchars()
และ ดูเหมือน echo ของ php มันจะ decode ระดับแรกให้แล้ว

Code (PHP)
1.<?php
2.$name = htmlspecialchars('<p>p</p>'); //1 level encoded
3.echo htmlspecialchars($name);
4.echo '<br>' . $name;
5.echo '<br><br>';
6.$name = htmlspecialchars(htmlspecialchars('<p>p</p>'));  //2 level encoded
7.echo $name . '<br>';
8.echo htmlspecialchars_decode($name);



การ decode ในไฟล์ 2 ด้วย JavaScript

test02.php
01.<div id="saved-result-text" style="display:none;">
02.    saved result: <span id="saved-result"></span>
03.</div>
04. 
05.<form id="saveForm" method="post">
06.    <input id="name" type="text" name="name" value="" maxlength="50">
07.    <br>
08.    <button type="submit" onclick="return ajaxSave();">Save</button>
09.</form>
10.<p>Normal JS save/display.</p>
11. 
12. 
13.<script>
14.    function ajaxSave() {
15.        let formData = new FormData(document.getElementById('saveForm'));
16.        let xhr = new XMLHttpRequest();
17. 
18.        xhr.onreadystatechange = function() {
19.            if (this.readyState == 4 && this.status == 200) {
20.                let response = JSON.parse(this.response);
21.                if (response.saved === true) {
22.                    window.location.reload();
23.                }
24.            }
25.        };
26. 
27.        xhr.open('POST', 'save.php');
28.        xhr.send(formData);
29. 
30.        return false;
31.    }
32.     
33.    // 1. DOM
34.    /*
35.    function decodeHtml(html) {
36.        var txt = document.createElement("textarea");
37.        txt.innerHTML = html;
38.        return txt.value;
39.    }
40.    */
41.     
42.    // หรือ
43.     
44.    // 2. RegEx
45.    function decodeEntities(encodedString) {
46.        var translate_re = /&(nbsp|amp|quot|lt|gt);/g;
47.        var translate = {
48.            "nbsp":" ",
49.            "amp" : "&",
50.            "quot": "\"",
51.            "lt"  : "<",
52.            "gt"  : ">"
53.        };
54.        return encodedString.replace(translate_re, function(match, entity) {
55.            return translate[entity];
56.        }).replace(/&#(\d+);/gi, function(match, numStr) {
57.            var num = parseInt(numStr, 10);
58.            return String.fromCharCode(num);
59.        });
60.    }
61.     
62.    // หรือ 3. ใช้ library เสริม เช่น he
64.    // ฯลฯ
65. 
66.    document.addEventListener('DOMContentLoaded', function() {
67.        let xhr = new XMLHttpRequest();
68. 
69.        xhr.onreadystatechange = function() {
70.            if (this.readyState == 4 && this.status == 200) {
71.                let response = JSON.parse(this.response);
72.                if (response && response.name) {
73.                    document.getElementById('saved-result-text').style = '';
74.                    document.getElementById('saved-result').innerHTML = response.name;
75.                    //document.getElementById('name').value = decodeHtml(response.name);
76.                    document.getElementById('name').value = decodeEntities(response.name);
77.                }
78.            }
79.        };
80. 
81.        xhr.open('GET', 'save.php');
82.        xhr.send();
83. 
84.        return false;
85.    }, false);
86.</script>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-05-14 00:42:24 By : PhrayaDev
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามวิธีกำหนดค่า HTML ที่ encode แล้วลงใน input หรือ textarea
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)





ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่