尝试在PHP中编写一个字符串。该字符串包含HTML代码。 HTML代码中包含Javascript代码。以及PHP字符串中的所有内容。
当前代码:
$record["DESCRIPTION"] = preg_replace("/(<iframe.*<\/iframe>)/U",
'$1 <br>
<button type="button" onclick="download()">تحميل</button><script>function download() {
APP.CallSub("download", true, YouTubeGetID($1));}
function YouTubeGetID(url){
var ID = ""; url = url.replace(/(>|<)/gi,"").split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/); if(url[2] !== undefined) { ID = url[2].split(/[^0-9a-z_\-]/i); ID = ID[0]; } else { ID = url; } return ID;}
</script>', $record["DESCRIPTION"]);
问题在于调用函数YouTubeGetID()
。我想用PHP正则表达式结果"$1"
作为参数调用此函数。我试过了:
* YouTubeGetID($1)
* YouTubeGetID("$1")
两者都不起作用。你有什么想法怎么做吗?
PS:YouTubeGetID()
功能正常运行。我用普通字符串YouTubeGetID("https://youtube.com/watch?v=tN_dtNinTjk")
测试了它。问题是使用正则表达式结果$ 1而不是任何字符串。
答案 0 :(得分:0)
你的例子正在运作。这是它的格式化版本。我在PHP Sandbox上运行它没有任何问题。唯一的调整是将贪婪的选择器.*
更改为非贪婪的.*?
。
我猜,你生成的JavaScript代码就是问题所在。生成的JavaScript代码无效。您需要转义$1
中的所有内容并用括号括起来。
以下是代码的格式化版本。
<?php
$record = array("DESCRIPTION" => '<iframe src="http://www.google.com"></iframe>');
$replacement = '$1<br>';
$replacement .= '<button type="button" onclick="download()">تحميل</button>';
$replacement .= '<script>';
$replacement .= 'function download() {';
$replacement .= ' APP.CallSub("download", true, YouTubeGetID($1));';
$replacement .= '}';
$replacement .= 'function YouTubeGetID(url){';
$replacement .= ' var ID = "";';
$replacement .= ' url = url.replace(/(>|<)/gi,"").split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/);';
$replacement .= ' if(url[2] !== undefined) {';
$replacement .= ' ID = url[2].split(/[^0-9a-z_\-]/i);';
$replacement .= ' ID = ID[0];';
$replacement .= ' } else {';
$replacement .= ' ID = url,';
$replacement .= ' }';
$replacement .= ' return ID;';
$replacement .= '}';
$replacement .= '</script>';
$record["DESCRIPTION"] = preg_replace("/(<iframe.*?<\/iframe>)/U", $replacement, $record["DESCRIPTION"]);
echo $record["DESCRIPTION"];
?>
以下是此代码的输出:
<iframe src="http://www.google.com"></iframe><br><button type="button" onclick="download()">تحميل</button><script>function download() { APP.CallSub("download", true, YouTubeGetID(<iframe src="http://www.google.com"></iframe>));}function YouTubeGetID(url){ var ID = ""; url = url.replace(/(>|<)/gi,"").split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/); if(url[2] !== undefined) { ID = url[2].split(/[^0-9a-z_\-]/i); ID = ID[0]; } else { ID = url, } return ID;}</script>
如果您需要进一步的帮助,请在下面提供评论。