ฉันมีปัญหาที่ไม่ซับซ้อน......ซึ่งดูเหมือนจะซับซ้อนกว่าที่ควรจะเป็น
ฉันมีแบบฟอร์มง่ายๆที่ใช้เพื่อเพิ่มเนื้อหาลงในเว็บไซต์ บางฟิลด์จำเป็นต้องใส่ html ลงไป อย่างไรก็ตาม เมื่อคุณป้อนองค์ประกอบ html บางส่วนลงในส่วนต่างๆ ของแบบฟอร์ม ระบบจะตัดสินว่าเกลียดคุณและแสดงข้อผิดพลาด 403 ที่ต้องห้าม นี่คือแบบฟอร์มด้านล่าง:
<?php
$data = f("SELECT * FROM table WHERE id = '{$_GET['id']}'");
?>
<form action="<?=$_SERVER['PHP_SELF']?>?id=<?=$_GET['id']?>&action=edit" method="post">
<table cellspacing="0" cellpadding="2" border="0">
<tr>
<td><b>Title:</b></td>
<td><input type="text" name="title" style="width: 300px;" value="<?=$data['title']?>" /></td>
</tr>
<tr>
<td><b>URL:</b></td>
<td><input type="text" name="url" style="width: 300px;" value="<?=$data['url']?>" /></td>
</tr>
<tr>
<td><b>Sub-Category:</b></td>
<td>
<select name="subCategoryId">
<option value=""></option>
<option value="1">A</option>
<option value="2">B</option>
</select>
</td>
</tr>
<tr>
<td><b>Short Description:</b></td>
<td><textarea name="shortDescription" rows="6" cols="60"><?=$data['shortDescription']?></textarea></td>
</tr>
<tr>
<td><b>Template:</b></td>
<td><textarea name="template" rows="6" cols="60"><?=$data['template']?></textarea></td>
</tr>
<tr>
<td><b>Ads:</b></td>
<td><textarea name="ads" rows="6" cols="60"><?=$data['ads']?></textarea></td>
</tr>
<tr>
<td><b>Keywords:</b></td>
<td><textarea name="keywords" rows="6" cols="60"><?=$data['keywords']?></textarea></td>
</tr>
<tr>
<td><b>Questions:</b></td>
<td><textarea name="questions" rows="6" cols="60"><?=$data['questions']?></textarea></td>
</tr>
<tr>
<td><b>Salary:</b></td>
<td><textarea name="salary" rows="6" cols="60"><?=$data['salary']?></textarea></td>
</tr>
<tr>
<td><b>Jobs:</b></td>
<td><textarea name="jobs" rows="6" cols="60"><?=$data['jobs']?></textarea></td>
</tr>
<tr>
<td><b>Meta Description:</b></td>
<td><input type="text" name="metaDescription" style="width: 300px;" value="<?=$data['metaDescription']?>" /></td>
</tr>
<tr>
<td><b>Meta Keywords:</b></td>
<td><input type="text" name="metaKeywords" style="width: 300px;" value="<?=$data['metaKeywords']?>" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="submit" value="Edit Job" /></td>
</tr>
</table>
</form>
ฉันมีรูปแบบอื่นที่เป็นไปตามรูปแบบเดียวกันนี้โดยไม่มีปัญหาใดๆ เพื่อให้เกิดความสับสนมากยิ่งขึ้น ระบบจะโยนข้อผิดพลาดนี้เมื่อมีการระบุองค์ประกอบ html 2 รายการในพื้นที่ข้อความเท่านั้น (รองรับองค์ประกอบ html หนึ่งรายการได้ดี) พื้นที่ข้อความ ได้แก่ โฆษณา คำสำคัญ เงินเดือน และงาน พื้นที่ข้อความอื่นๆ ก็พอใช้ได้ แต่ 4 อย่างนี้ไม่ได้ผล ถ้าฉันสามารถทำให้สิ่งนี้สับสนมากขึ้นอีกหน่อย ถ้าฉันป้อนข้อความในช่องเหล่านั้นแล้วบันทึก มันก็จะทำงานได้โดยไม่มีปัญหา
ในการจัดการข้อมูลที่โพสต์ ฉันใช้เฉพาะ mysql_real_escape_string() เพื่อจัดการข้อมูล ฉันไม่ได้ทำ strip_tags() เนื่องจากฉันต้องการ html ในนั้น
นี่เป็นข้อผิดพลาด apache แปลก ๆ ที่สามารถแก้ไขได้ด้วย .htaccess หรือไม่ มีโมดูลใน PHP ที่ขัดแย้งกับสิ่งนี้หรือไม่?
------- แก้ไข นี่คือคำตอบ ---------
เบ็นเสนอคำตอบที่ยอดเยี่ยมซึ่งอาจเป็นปัญหา และฉันไม่สามารถแก้ไขได้เนื่องจากขาดสิทธิพิเศษ ดังนั้นฉันจึงสร้างกิจกรรม onsubmit จากแนวคิดที่ Gerben มอบให้ฉันและเขียนจาวาสคริปต์ต่อไปนี้
function awesome() {
elements = document.forms[0].elements;
for(var i = 0; i < elements.length; i++) {
switch(elements[i].name) {
case "ads":
case "shortDescription":
case "template":
case "questions":
case "salary":
case "jobs":
str = elements[i].value;
elements[i].value = str.replace(/</g,"#@!");
break;
}
}
return true;
}
จากนั้นในส่วนรับ ฉันได้ str_replace เพื่อแทนที่ #@! กลับไปที่ ‹ และอย่างน้อยนั่นก็ทำให้สิ่งนี้ได้ผล
ฉันขี่ม้าแล้ว....ฮ้า!
ขอบคุณสำหรับความช่วยเหลือทั้งหมดของคุณ :)
<?=htmlentities($data['xxxx'])?>
- person Gerben   schedule 12.01.2012