我使用joomla来管理网站...我正在开发一个独立的php应用程序,它将数据插入和修改到joomla用来存储动态创建的网页的html的表中...... / p>
它的工作方式是我使用joomla组件来创建内容,这些文章的html代码存储在一个表中的字段中,比如content_table,由joomla提供。这个html代码稍后被检索以构建一部分一个网页。
我想对我的独立应用程序做同样的事情......即将html代码添加到content_table中的字段中,稍后可以通过joomla检索它以构建页面的一部分。
问题是:当然,html代码有很多单引号和双引号,这在插入数据库时会出现问题..我已经尝试过mysql_escape_string()并且仍然会出现语法错误。
我可以使用addslashes()但是由于joomla本身稍后会检索代码,因此在以后检索它时不可能使用stripslashes()....
无论如何,我可以在表格的字段中添加html代码......
感谢您的建议...... !!
编辑:添加mysql_escape_string()后我得到了
Error adding details. Reason : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'fulltext = '\n
这是我的疑问:
UPDATE $jos_content
SET introtext = '$intro_code',
fulltext = '$article_code'
WHERE id = '$article_id'";
输入字符串如下:
$article_code = '<hr id="system-readmore" />
<center>{loadposition user50}</center>
<p style="text-align: center;">
<span style="color: rgb(0, 255, 255);">
<i>
<b>
<span style="font-size: x-large;">
<span style="font-family: Arial;">
</span>
</span>
</b>
</i>
</span>
<span style="color: rgb(0, 255, 255);">
<i>
<b>
<span style="font-size: x-large;">
<span style="font-family: Arial;">
<?php echo $title; ?>
</span>
</span>
</b>
</i>
</span>
<span style="color: rgb(0, 255, 255);">
<i>
<b>
<span style="font-size: x-large;">
<span style="font-family: Arial;">
<br />
</span>
</span>
</b>
</i>
</span>
</p>
<p style="text-align: center;">
<img height="269" width="515" border="3"
title="<?php echo $title; ?>"
alt=" <?php echo $title; ?>"
src="<?php echo $article_image;?>"
</p>
<p>
<span style="font-size: small;">
<span style="font-family: Arial;">
<span style="color: rgb(153, 204, 255);">
<p style="margin-top: 2px; margin-bottom: 2px; margin-left: 120px; text-align: left;">
<i>
<span style="color: rgb(0, 255, 0);">
<strong>
Cast :
</strong>
<b>
</b>
</span>
</i>
<span style="color: rgb(0, 255, 255);">
<b>
<?php echo $cast; ?>
</b>
</span>
<i>
<span style="color: rgb(0, 255, 255);">
<b>
<br />
</b>
</span>
</i>
<span style="font-family: Arial;">
<span style="font-size: small;">
<span style="color: rgb(153, 204, 255);">
</span>
</span>
<span style="color: rgb(0, 255, 0);">
<i>
<strong>
Direction
</strong>
</i>
<strong>
:
</strong>
<b>
</b>
</span>
<span style="color: rgb(0, 255, 255);">
<b>
<span class="href"
id="ctl00_ContentPlaceHolderMainContent_FormView1_Director">
<?php echo $director; ?>
</span>
</b>
</span>
</span>
<span style="font-family: Arial;">
<br />
<span style="color: rgb(0, 255, 0);">
<i>
<strong>
Production
</strong>
</i>
<strong>
:
</strong>
<b>
</b>
</span>
<span style="color: rgb(0, 255, 255);">
<b>
<?php echo $direction; ?>
</b>
</span>
<span style="color: rgb(255, 102, 0);">
<i>
<b>
<br />
</b>
</i>
</span>
<span style="font-family: Arial;">
<span style="color: rgb(0, 255, 0);">
<span style="font-family: Arial;">
<span style="font-size: small;">
<i>
<strong>
Music
</strong>
</i>
<strong>
:
</strong>
</span>
</span>
</span>
</span>
<span style="color: rgb(0, 255, 255);">
<b>
<i>
</i>
<?php echo $music; ?>
<i>
<br />
<span style="color: rgb(0, 255, 0);">
Lyrics
</span>
</i>
<span style="color: rgb(0, 255, 0);">
:
</span>
<i>
</i>
</b>
</span>
<span style="color: rgb(0, 255, 255);">
<b>
<?php echo $lyrics; ?>
</b>
</span>
<span style="color: rgb(0, 255, 255);">
<b>
<i>
<br />
</i>
<span style="color: rgb(0, 255, 0);">
<i>
Year
</i>
:
</span>
<?php echo $year; ?>
</b>
</span>
</span>
<i>
<span style="color: rgb(0, 255, 255);">
<b>
</b>
</span>
</i>
</p>
</span>
</span>
</span>
</p>
<p>
<left>
{loadposition user14}
</left>
</p>
<div style="text-align: center;">
<p>
<i>
<span style="font-family: Arial;">
<b>
<span style="font-size: medium;">
<span style="color: rgb(51, 255, 255);">
Click
<img src="images/stories/Play button1.png"
alt="alt" />
in the Playlist to Download Songs
</span>
</span>
</b>
</span>
</i>
</p>
</div>
<table border="0" align="center">
<tbody>
<tr>
<td>
<h4 style="text-align: center;">
<i>
<span style="color: rgb(102, 255, 0);">
<b>
<b>
High Bandwidth Users
</b>
</b>
</span>
</i>
<i>
<span style="color: rgb(102, 255, 0);">
<b>
<b>
</b>
</b>
</span>
</i>
<span style="color: rgb(102, 255, 0);">
<b>
</b>
</span>
</h4>
</td>
<td>
<h4 style="text-align: center;">
<i>
<span style="color: rgb(102, 255, 0);">
<b>
<b>
Low Bandwidth Users
</b>
</b>
</span>
</i>
<span style="color: rgb(102, 255, 0);">
<b>
<br />
</b>
</span>
</h4>
</td>
</tr>
<tr>
<td>
{auto width="235" displayheight="0" height="225"} <?php echo $hqList; ?> {/auto}
</td>
<td>
{auto width="235" displayheight="0" height="225"}<?php echo $lqList; ?>{/auto}
</td>
</tr>
</tbody>
</table>
<center>
{loadposition user50}
</center>';
答案 0 :(得分:27)
我更喜欢在插入数据库之前将代码转换为普通字符串。我认为,这是最安全的方案。考虑使用此代码:
$article_code = base64_encode($article_code);
/* insert to database */
因此,当您想要使用该代码时,只需使用base64_decode进行解码。我建议你使用'text'数据类型来保存$ article_code而不是'varchar'。
答案 1 :(得分:7)
你不应该需要斜杠。在正常插入期间唯一会导致问题的是引号,而mysql_escape_string()
应该处理除了charset问题之外的问题。也请尝试mysql_real_escape_string()
。
另请注意,将原始用户提供的HTML存储在数据库中可能会导致安全问题。考虑使用像bbcode或markdown这样的东西。
答案 2 :(得分:4)
这是我找到addslashes()
$article_code = addslashes($article_code);
UPDATE $jos_content
SET introtext = '$intro_code',
fulltext = '$article_code'
WHERE id = '$article_id'";
答案 3 :(得分:2)
嗯..调试它..事实证明问题毕竟不是逃避功能......
查看查询:
UPDATE $jos_content
SET introtext = '$intro_code',
fulltext = '$article_code'
WHERE id = '$article_id'";
你可以看到'fulltext'字段......显然,“fulltext”这个词是一个mysql关键字...确切地说,它是一个字段类型,如TEXT,INT,MEDIUMTEXT等......
我将查询更改为此
"UPDATE $jos_content
SET $jos_content.introtext = '$intro_code',
$jos_content.fulltext = '$article_code'
WHERE $jos_content.id = '$article_id'";
瞧...... !!!!
答案 4 :(得分:1)
只是为了确认,您的查询看起来是这样的:
$query = '
UPDATE "'.mysql_real_escape_string ($jos_content).'"
SET introtext = "'.mysql_real_escape_string ($intro_code).'",
fulltext = "'.mysql_real_escape_string ($article_code).'"
WHERE id = "'.mysql_real_escape_string ($article_id).'"
";
答案 5 :(得分:1)
fulltext
是一个mysql的predefine关键字。请使用Acute(`)或单引号(')
这是代码 -
UPDATE $jos_content
SET `introtext` = '$intro_code',
`fulltext` = '$article_code'
WHERE `id` = '$article_id'";
答案 6 :(得分:1)
我有同样的问题,我用正则表达式修复它。
您可以使用以下内容:$target = '{~p class={{q}}important-text{{q}}~}Some text here {~/p~}';
然后使用preg_replace()
函数:
class handle
{
public static function makehtml($target)
{
$output = preg_replace("#{~#", "<", $target);
$output = preg_replace("#~}#", ">", $target);
$output = preg_replace("#{{q}}#", '"', $target);
return $output;
}
}
echo handle::makehtml($target);
// output : <p class="important-text">Some text here</p>
答案 7 :(得分:0)
如果您担心空间并且正在使用此处发布的base 64编码方法,您可以使用php中的gzdeflate命令将其删除然后对其进行编码。这是一些生成的示例字符的小测试脚本。显然,如果你关心大小,有不同的压缩方法,但这意味着你可以把它放到mysql中,最小化数据库的大小。然后你可以用gzinflate(base64_decode(...));
读回来<?php
//generate sample chars for the example
function generateRandomString($length = 10000) {
$characters = '01234"56/789abcdefghij:klmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
//
$string =generateRandomString();
echo 'string size:'.strlen($string);
$b64html = base64_encode($string);
echo '<br/>'.'Original base64 size:'.strlen($b64html);
$compressed = gzdeflate($string, 9);
echo '<br/>'.'compressed size:'.strlen($compressed);
echo '<br/>'.'base64 compressed size:'.strlen(base64_encode($compressed));
/* insert into db the base64_encode($compressed); */
?>
答案 8 :(得分:0)
调用mysql_escape_string()函数传入包含html文本的变量,如:
函数mysql_escape_string($ _ POST [&#34;文本&#34;]);
将确保文本中的引号等特殊字符不会导致php错误,并且数据库将成功更新。
答案 9 :(得分:0)
将html代码插入数据库
$title = $_POST['title'];
$code = '<h1>hello</h1></p>this html tage</p>';
$htmlcode = addslashes($code);
$query = "INSERT INTO `template` (`title`,`code`) VALUES ('".$title."','".$htmlcode."');";
mysqli_query($con,$query);
将数据插入数据库后,在列表页面中显示数据
$result = mysqli_query($con,'SELECT * FROM template');
while($row = mysqli_fetch_assoc($result)) {
echo htmlentities($row['code']);
}
htmlentities($row['code']); //here your row name;