2017-01-17 12 views
0

PHPで文字列を書き込もうとしています。文字列にHTMLコードが含まれています。 HTMLコードにはJavascriptコードが含まれています。 PHPの文字列のすべて。PHP文字列内のJavaScriptコード内のJavaScriptコード

現在のコード:

$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

$レコード – mplungjan

+0

はあなたのコードがかなりあるhttp://php.net/manual/en/language.types.string.php – CD001

+0

、 『......あなたは" 'の使い』すべてを交換してみてください$ 1でした –

答えて

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> 

あなたがさらに支援が必要な場合は、以下のコメントをご記入ください。

+0

何らかの理由でコードが正常に実行されなかったため、javacriptが正常に実行されなかった html属性タグにデータを保存してからjavascriptからデータを取得しました。 ありがとう – Alexander

関連する問題