Başka bir dize içinde bir alıntı dize genişleyen

4 Cevap php

Ben bazı html kodu içeren iki değişken vardır ve başka değişken bir html formu için kodu içeren. Ancak bu bazı hataların nedenleri, bir işleve parametre olarak geçmesi saniye içinde bir dize genişletmeye çalışıyorum.

Benim markası kapat işlevi çok basit:

function popup(htmlcode){
child1 = window.open ("about:blank");
child1.document.write(htmlcode);
child1.document.close(); 
}

Yukarıda işlevini kullanır kodu

<?php
$blah = "<h1>Well</h1>"; $test = "<h2>Done</h2>";
echo '<script type="text/javascript" src="fetchlayers.js"></script>';
$formcode = "<form action=\"process.php\" method=\"post\" enctype=\"multipart/form-data \">
<label for=\"file\">Filename:</label>
<input type=\"file\" name=\"file\" id=\"file\"/> 
<br />
<input type=\"submit\" name=\"submit\" value=\"Submit\" onclick=\"setTimeout(function() { sendInfo(\"".$blah."\", \"".$test."\"); } ),1250);\" />
</form>";

echo "<h1>hello</h1>
<div id='form'>
<a href='#' onclick=\"popup('" . htmlentities($formcode) . "'); return false;\">
click here</a>
</div>";

Bu, yeterince iyi html kodunu üretir ancak kundakçı bana bir sonlandırılmamış dize yanal var bir hata verir. Bu nerede olduğunu bulamıyorum. Ben bu ideal değildir yapmış şekilde anlamak, ama öğrenme yaşıyorum ve şu anda daha iyi bir yol bilmiyorum. Ben herhangi bir giriş takdir

edit: Tamam, sorun ben n karakterini \ edildi sonlandırılmamış dize değişmezleri, vardı yani. Ben bir satır içine dize yapılan ve doğru fonksiyonu olarak adlandırılır.

Birden çok hatları içine bir echo deyimi kırmak mümkün değil mi?

Şimdi sorun popupwindow oluşturulan html ile. Kodun bazı aslında ekrana yazdırılır, neden bu?

<form action="process.php" method="post" enctype="multipart/form-data "><label for="file">Filename:</label><input name="file" id="file" type="file"> <br><input name="submit" value="Submit" onclick="setTimeout(function() { sendInfo(" type="submit"><h1>Well</h1>", "<h2>Done</h2>"); },1250);" /></form>

Resme bakın here:

4 Cevap

Bunu yapmak için daha iyi bir yolu, zaten form koduna sahip bir HTML veya PHP sayfasını açın yerine açılış about:blank ve dinamik geçirmeden etmektir.

Hiç doğrudan belgelemek için yazılmış olabilir sadece bu yüzden bir JavaScript işlevi içine HTML geçmek olmalıdır hiçbir neden yoktur.

Kesinlikle olduğu gibi açılır işlevi tutmak varsa, ben this answer için "How do I escape a string inside javascript inside an onClick handler?" yardımıyla bir çözüm buldu.

<?php
$blah = "<h1>Well</h1>"; $test = "<h2>Done</h2>";
echo '<script type="text/javascript" src="fetchlayers.js"></script>';
$formcode = '<form action="process.php" method="post" enctype="multipart/form-data ">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"/> 
<br />
<input type="submit" name="submit" value="Submit" onclick="setTimeout(function() { sendInfo(\\x27'.$blah.'\\x27, \\x27'.$test.'\\x27); }, 1250);" />
</form>';

echo "<h1>hello</h1>
<div id='form'>
<a href='#' onclick='popup(\"" . addslashes(str_replace("\n", ' ', $formcode)) . "\"); return false;'>
click here</a>
</div>";
?>


Düzenlemek önce:

Belki farklı yapabilirsiniz.

Javascript fonksiyonları:

function popup(id, params){
    var html = document.getElementById(id).innerHTML;

    if (params != undefined) {
    	html = findAndReplaceStrings(html, params);
    }

    var child1 = window.open ("about:blank");
    child1.document.write(html);
    child1.document.close();
}

function findAndReplaceStrings(text, json) {
    for (var x in json) { 
    	text = text.replace(x, json[x]);
    }
    return text;
}

HTML gizli kodu:

<div style="display:none;" id="process">
<form action="process.php" method="post" enctype="multipart/form-data ">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"/> 
<br />
<input id="submit" type="submit" name="submit" value="Submit" onclick="setTimeout(function() { sendInfo('{param1}', '{param2}'); } ), 1250);" />
</form>
</div>

Json ile HTML linki:

<a href="#" onclick="popup('process', {'{param1}':'<h1>Well</h1>', '{param2}':'<h2>Done</h2>'}); return false;">
click here</a>

Sen yaparak satırbaşları (\ n) kaçmak gerekir

$formcode = str_replace("\n", "\\n", $formcode);

Ayrıca tırnak kaçmak zorunda

$formcode = str_replace("'", "\\'", $formcode);

Sen bir tek içine bu iki satır birleştirir yapabilirsiniz:

$formcode = str_replace(array("\n", "'"), array("\\n", "\\'"), $formcode);

Gönder düğmesi çok erken setTimeout fonksiyonunu kapatır ekstra ) hangi vardır. Belirli bir nokta içeride:

} ),1250

aynı zamanda muhtemelen tüm okumayı kolaylaştırmak için php dizge içinde tek tırnak kullanarak düşünmek gerekir. Ve çift tırnak kullanarak konum çünkü değişkenleri $ vesaire $ ve testin içeriğini eklemek için dize çıkmak zorunda değilsiniz.

böyle bir şey çalışması gerekir:

$formcode = "...
<input type='submit' name='submit' value='Submit' 
onclick='setTimeout(function() { sendInfo(\"$blah\", \"$test\"); },1250);' />
...

";

EDIT:

erken şimdi de OnClick kapatıyor gibi görünüyor. Başlangıç ​​ve bitiş tırnak gibi bu Eşleştirme:

onclick=\"setTimeout(function() { sendInfo(\"

Ben, aşağıdakilere sendInfo çizgi değişti koştu ve çalışıyor gibi görünüyor. Zamanından önce () açılır için çağrı kapanmıyor yani tek tırnak burada kaçtı.

sendInfo(\'".$blah."\', \'".$test."\');