PHP字符串中的HTML代码内的Javascript代码

时间:2017-01-17 15:53:02

标签: javascript php html regex preg-replace

尝试在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而不是任何字符串。

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>

如果您需要进一步的帮助,请在下面提供评论。