gpt4 book ai didi

Javascript变量传递带撇号的文本字符串,被 chop ?

转载 作者:行者123 更新时间:2023-12-01 01:27:58 27 4
gpt4 key购买 nike

我有一个代码块,其中包含以下形式的行:

<form>
<input type='hidden' name='title' value='"+val.sources[0].title+"'>
</form>

在接收端,我有一个像这样抓取数据的文档:

$title = $_POST['title'];

这将被插入到数据库中,但任何包含撇号的“标题”都会在撇号处被切断 - 请参阅示例:

“我不想要它”-----> 结果是“我不想要”

“David'd Car”-----> 结果为“David”

等等

我确实在处理方面尝试了几次 php str_replace 努力,但没有成功,例如:

$title = str_replace(''', '"', $_POST['title']);

数据似乎没有正确发送,但不确定,有什么建议

这是完整的 block 并在下面插入:

$.each(playlist, function(index, val) {
playlistHtml += "<li class='playlist-item "+((val.sources[0].title).substring(0, 1)).toUpperCase()+"'><span class='jp-list-title' style='border-bottom:1px dotted #d2d2d2'>"
+
"<table border='0' style='width:100%;margin:8px 0px'><tr>"
+
"<td style='width:45px;text-align:center'>";
// -----
// ---- ICONS that preceed track -- YouTube, Vimeo, Audio, Movie etc. -----
// -----
if (val.sources[0].media == "0"){ // youtube
playlistHtml += "<span style='min-width:30px;text-align:center;color:#5fabec;font-size:20px'><i class='fab fa-youtube' aria-hidden='true'></i></span>"
}
if (val.sources[0].media == "1"){ // vimeo
playlistHtml += "<span style='min-width:30px;text-align:center;color:#5fabec;font-size:20px'><i class='fab fa-vimeo-square' aria-hidden='true'></i></span>"
}
if (val.sources[0].media == "2"){ // soundcloud
playlistHtml += "<span style='min-width:30px;text-align:center;color:#5fabec;font-size:20px'><i class='fab fa-soundcloud' aria-hidden='true'></i></span>"
}
if (val.sources[0].media == "3"){ // MP3 audio link
playlistHtml += "<span style='min-width:30px;text-align:center;color:#5fabec;font-size:20px'><i class='fas fa-file-audio' aria-hidden='true'></i></span>"
}
if (val.sources[0].media == "4"){ // MP4 video link
playlistHtml += "<span style='min-width:30px;text-align:center;color:#5fabec;font-size:20px'><i class='fas fa-film' aria-hidden='true'></i></span>"
}
if (val.sources[0].media == "5"){ // radio link
playlistHtml += "<span style='min-width:30px;text-align:center;color:#5fabec;font-size:20px'><i class='fas fa-microphone' aria-hidden='true'></i></span>"
}

playlistHtml += "</td><td style='font-size:<?php echo $fontsize; ?>';padding:13px'><div class='playlist_abbrev'><span onclick='executeParent()'>"+val.sources[0].title+"&nbsp;&nbsp;<span style='color:#d2d2d2'>|</span>&nbsp;&nbsp;<span style='font-size:<?php echo $fontsize_artist; ?>'>"+val.sources[0].artist+"</span></div></td>"
+ /* TITLE -- ADD TO FAV */
"<td style='font-size:<?php echo $fontsize; ?>';padding:13px'><form id='add Favorite' action='process_fav_add.php' method='post'><input type='hidden' name='active' value='1'><input type='hidden' name='mediatype' value='"+val.sources[0].media+"'><input type='hidden' name='title' value='"+val.sources[0].title+"'><input type='hidden' name='artist' value='"+val.sources[0].artist+"'><input type='hidden' name='source_url' value='"+val.sources[0].src+"'><input type='hidden' name='playlists' value='My-Favorites'><input type='hidden' name='user' value='<?php echo $id; ?>'><input type='hidden' name='playlist' value='<?php echo $playlist; ?>'><button class='playlist-favorite' id='sub'><i class='far fa-heart'></i></button></form></td>"
"</tr></table></span></li>"

插入

$active = $_POST['active'];
$mediatype = $_POST['mediatype'];
$title = $_POST['title'];
// $title = str_replace(''', '"', $_POST['title']);
$artist = $_POST['artist'];
$source_url = $_POST['source_url'];
$playlists = $_POST['playlists'];
$user = $_POST['user'];
$playlist = $_POST['playlist'];

$rec_insert = mysql_query("INSERT INTO member_tracks(active, mediatype, title, artist, source_url, playlists, user) VALUES ('$active', '$mediatype', '$title', '$artist', '$source_url', '$playlists', '$user')");
if(! $rec_insert )
{
die('Could not enter data: ' . mysql_error());
} else {
echo '<html>';
echo '<head>';
echo '<title>MusicPax</title>';
echo '</head>';
echo '<body style="background-color:#000;font-family:sans-serif;color:#666">';
echo '<table width="100%" height="100%"><tr><td width="100%" height="100%">';
echo '<p style="padding-bottom:20px;text-align:center;font-size:18px;letter-spacing:2px">TRACK ADDED SUCCESSFULLY</p>';
echo '</td></tr></table>';
echo '</body>';
echo '</html>';
}

// $conn->close();

最佳答案

有几个问题。

  1. 首先是通过一些 jQuery 代码将标题放置在 input 元素中的直接问题。您当前构建的字符串如下所示:

    "....<input value='" + val.sources[0].title + "'>...."

    正如您已经检测到的,标题值中的引号会破坏内容。您可以使用此函数转义标题:

    function escapeHtmlAttribute(s) {
    return s.replace(/&/g, "&amp;").replace(/'/g, "&apos;");
    }

    这会使用适当的 HTML 实体对引号进行编码,并且还会转义 & 符号,否则可能会被误解为 HTML 实体的开头。

    那么你的字符串将像这样构建:

    "....<input value='" + escapeHtmlAttribute(val.sources[0].title) + "'>...."
  2. 其次,您的 PHP 代码中也存在类似的问题,您将字符串直接注入(inject) SQL 中。它不仅会导致标题中的引用出现问题,还会为恶意 SQL injection 打开大门。 。在过去,建议您通过调用 mysql_real_escape_string 来规避这一点:

    "INSERT INTO ....... VALUES(......, '" + mysql_real_escape_string($title) + "', ....)"

    ...但最好不要注入(inject)任何字符串并使用准备好的语句。这让我想到以下几点:

  3. 您正在使用 mysql_ 函数集,这些函数在 PHP 5.0 中已弃用,并且自 PHP 7 起不再受支持。您确实必须远离它们。今天就做吧。相反,MySQLiPDO_MySQL应使用扩展名。此外,您应该使用 prepared statements 。这样你就不再需要任何转义,也不会有任何 SQL 注入(inject)的风险。请阅读How can I prevent SQL injection in PHP?

关于Javascript变量传递带撇号的文本字符串,被 chop ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53578049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com