Javascript变量传递带撇号的文本字符串,是否被截断?
我有一段代码,其中包含以下形式的行:Javascript变量传递带撇号的文本字符串,是否被截断?,javascript,php,Javascript,Php,我有一段代码,其中包含以下形式的行: <form> <input type='hidden' name='title' value='"+val.sources[0].title+"'> </form> 这将被插入到数据库中,但任何包含撇号的“标题”都将在撇号处被截断-参见示例: “我不想要它”-->结果是“我不想要” “大卫的车”-->结果是“大卫” 等等 我在处理端尝试了几次php str_替换,但都没有成功,例如: $title = str_repla
<form>
<input type='hidden' name='title' value='"+val.sources[0].title+"'>
</form>
这将被插入到数据库中,但任何包含撇号的“标题”都将在撇号处被截断-参见示例:
“我不想要它”-->结果是“我不想要”
“大卫的车”-->结果是“大卫”
等等
我在处理端尝试了几次php str_替换,但都没有成功,例如:
$title = str_replace(''', '"', $_POST['title']);
数据似乎未正确发送,但不确定是否有任何建议 这是完整的块,并在下面插入:
$.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+" <span style='color:#d2d2d2'>|</span> <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>"
$。每个(播放列表、功能(索引、val){
playlishtml++“”+val.sources[0]。艺术家+“”
+/*标题——添加到FAV*/
“'>您可以尝试:
您可以尝试:
有几个问题
首先是通过一些jQuery代码将标题放置在input
元素中的直接问题
"....<input value='" + val.sources[0].title + "'>...."
"....<input value='" + escapeHtmlAttribute(val.sources[0].title) + "'>...."
这将使用适当的HTML实体对引号进行编码,并且还将避开符号,否则可能会被误解为HTML实体的开头
因此,您的字符串将按如下方式构建:
"....<input value='" + val.sources[0].title + "'>...."
"....<input value='" + escapeHtmlAttribute(val.sources[0].title) + "'>...."
…但最好不要注入任何字符串,而是使用预先准备好的语句。这让我想到以下几点:
您正在使用的是mysql\uuu
函数集,这些函数在PHP5.0中已被弃用,并且自PHP7以来不再受支持。您真的必须远离它们。现在就这样做。相反,应该使用or扩展。此外,您应该使用。这样,您就不再需要任何转义,也不会有任何SQL注入的风险。Please读取
有几个问题
首先是通过一些jQuery代码将标题放置在input
元素中的直接问题
"....<input value='" + val.sources[0].title + "'>...."
"....<input value='" + escapeHtmlAttribute(val.sources[0].title) + "'>...."
这将使用适当的HTML实体对引号进行编码,并且还将避开符号,否则可能会被误解为HTML实体的开头
因此,您的字符串将按如下方式构建:
"....<input value='" + val.sources[0].title + "'>...."
"....<input value='" + escapeHtmlAttribute(val.sources[0].title) + "'>...."
…但最好不要注入任何字符串,而是使用预先准备好的语句。这让我想到以下几点:
您正在使用的是mysql\uuu
函数集,这些函数在PHP5.0中已被弃用,并且自PHP7以来不再受支持。您真的必须远离它们。现在就这样做。相反,应该使用or扩展。此外,您应该使用。这样,您就不再需要任何转义,也不会有任何SQL注入的风险。Please读取
您似乎正在使用不带参数的SQL insert语句插入到数据库中。使用参数可以避免必须更改您的值这是一种特殊的语法“+val.sources[0]。title+
显示模板库的使用情况?如果是,了解模板库是什么将很有帮助。似乎发生的情况是,该值变为value=“text-up-to-the-quote”
当文本值中有引号时,保留字符串的其余部分。很可能整个文本值没有到达服务器。显示insert
语句您正在使用单引号来分隔HTML属性。发送到客户端的HTML将如下所示:value='I Don't Want'
在e浏览器中,属性值在第二个'
处结束,即值='i't Want It'
“数据似乎未正确发送”您是否通过调试验证了这一点?不值得您检查接收端,而事实上,问题出在发送方端。您似乎正在使用不带参数的SQL insert语句插入到数据库中。使用参数可避免必须更改您的值这是一种特殊的语法“+val.sources[0]。title+”
显示模板库的使用情况?如果是,了解模板库是什么将很有帮助。似乎发生的情况是,该值变为引号之前的value=“text”"
当文本值中有引号时,保留字符串的其余部分。很可能整个文本值没有到达服务器。显示insert
语句您正在使用单引号来分隔HTML属性。发送到客户端的HTML将如下所示:value='I Don't Want'
在e浏览器中,属性值在第二个“
”处结束,即值='i't Want'
“数据似乎未正确发送”您是否通过调试验证了这一点?不值得检查接收端,而事实上,问题出在发送方。尝试了此方法(我这边运气不好)看我上面修改的代码(我这边运气不好)看我上面修改的代码