2017-01-17 2 views
0

Der Versuch, eine Zeichenfolge in PHP zu schreiben. Die Zeichenfolge enthält HTML-Code. Der HTML-Code enthält Javascript-Code darin. Und all das in einer PHP-Zeichenfolge.Javascript-Code innerhalb von HTML-Code in PHP-Zeichenfolge

Aktuelle Code:

$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"]); 

Das Problem ist die Funktion YouTubeGetID() in Berufung. Ich möchte diese Funktion mit dem PHP-Regex-Ergebnis "$1" als Parameter aufrufen. Ich habe versucht: * YouTubeGetID($1) * YouTubeGetID("$1")

Beide haben nicht funktioniert. Hast du irgendwelche Ideen wie das geht?

PS: Die YouTubeGetID() Funktion funktioniert ordnungsgemäß. Ich habe es mit einer normalen Schnur YouTubeGetID("https://youtube.com/watch?v=tN_dtNinTjk") getestet. Das Problem besteht darin, das Regex-Ergebnis $ 1 anstelle einer Zeichenfolge zu verwenden.

+1

Haben Sie versucht, alle "für" zu tauschen und verwenden "$ 1 ......", $ Datensatz – mplungjan

+0

http://php.net/manual/en/language.types.string.php – CD001

+0

Ihr Code ist ziemlich ein Durcheinander. Vielleicht Formatierung hilft Ihnen, es besser zu verstehen. –

Antwort

0

Ihr Beispiel funktioniert. Hier ist eine formatierte Version davon. Ich betreibe es ohne Probleme auf einem PHP Sandbox. Die einzige Anpassung war, den gierigen Selektor .* zu einem nicht-gierigen .*? zu ändern.

Ich schätze, Ihr generierter JavaScript-Code ist hier das Problem. Der generierte JavaScript-Code ist nicht gültig. Sie müssen alles in $1 entkommen und es mit Klammern umgeben.

Hier ist eine formatierte Version Ihres Codes.

<?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"]; 
?> 

Und hier ist der Ausgang dieses Code:

<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> 

Wenn Sie weitere Hilfe benötigen, wenden Sie sich bitte unten einen Kommentar zur Verfügung stellen.

+0

aus irgendeinem Grund arbeitete Ihr Code nicht für mich, das Javascript auf dem nicht erfolgreich ausgeführt Ich endete, die Daten in einem html Attribut-Tag speicherend, dann erhalten es von Javascript. vielen Dank – Alexander

Verwandte Themen