【问题标题】:How to parse large strings of html into Javascript with php echo variable如何使用 php echo 变量将大字符串 html 解析为 Javascript
【发布时间】:2017-06-22 09:06:30
【问题描述】:

我有一个 javascript 函数,可以将存储在 mysql 数据库中的 html 代码显示到 CKeditor <textarea> 中。当用户选择任何选项时,mysql 查询旨在将 html 代码块作为 php 变量回显到 javascript 中。

选择选项在从 javascript 中选择回显变量时非常有效。这里的问题是,当我将纯文本保存到数据库中时,它们会显示出来,但是当我将 html 代码保存到数据库中时,javascript 拒绝显示它。

我尝试了几种方法将 html 字符串回显到 javascript 中,例如:

 <?php echo json_encode($fbilling); ?> \\Accepts Only Plain Texts Not HTML Codes
'<?php echo decodeURI(rawurlencode($freply)); ?>' \\Refuses To load Page
'<?php echo htmlspecialchars_decode(rawurlencode($freply)); ?>'  \\Changes HTML Codes To Characters Like :%3Ctable%20data-module%3D%22header%22%20data
'<?php htmlspecialchars(json_encode($freply)); ?>'  \\ No Value is Displays, Just Empty
'<?php echo htmlspecialchars(json_encode($freply)); ?>' \\ No Value is Displays, Just Empty
'<?php echo htmlspecialchars(rawurlencode($freply)); ?>' \\Changes HTML Codes To Characters Like :%3Ctable%20data-module%3D%22header%22%20data

这是我的代码:

var Code = new Array("", <?php echo json_encode($fwelcome); ?>, <?php echo json_encode($fbilling); ?>, <?php echo json_encode($freply); ?>, <?php echo json_encode($fdelivery); ?>);

function change() {
  var ID = formconteudo.message.options[formconteudo.message.selectedIndex].value;
  CKEDITOR.instances.editor1.setData('<p>' + Code[ID] + '</p>');
}
<div class="col-md-4">
  <div class="form-group">
    <?php             
                        $sql3="SELECT * FROM email WHERE id='1'";
                        $result3=mysql_query($sql3) or die(mysql_error());
                        $rwsf=  mysql_fetch_array($result3);
                        $fwelcome= $rwsf[3]; 
                        $freply= $rwsf[2]; 
                        $fbilling= $rwsf[1]; 
                        $fdelivery= $rwsf[4]; 
                        ?>
    <label>Email Templates: </label>
    <select name="message" onChange="change();" class="form-control select2 required" style="width: 100%;">
      <option disabled selected>Click To Select</option>
      <option value="1">Welcome Email</option>
      <option value="2">Billing Email</option>
      <option value="3">Basic Reply Email</option>
      <option value="4">Delivery Process Email</option>
    </select>
  </div>
</div>
</div>


<div class="row">
  <div class="col-md-12">
    <div class="form-group">
      <input type="text" name="subject" placeholder="Subject" class="form-control required">
    </div>
  </div>
</div>
<textarea id="editor1" name="editor1" rows="10" cols="80">Select your mail design from the 'Email' drop down list above.</textarea><br>

<div class="form-wizard-buttons">
  <button type="submit" class="btn btn-success" style="border:0px"><i class="fa  fa-send"> Send Mail</i></button>
</div>

【问题讨论】:

  • 尝试 var Code = new Array("", "", "", "", "");
  • var Code = ["", "&lt;?php echo json_encode($fwelcome); ?&gt;", "&lt;?php echo json_encode($fbilling); ?&gt;", "&lt;?php echo json_encode($freply); ?&gt;", "&lt;?php echo json_encode($fdelivery); ?&gt;"];
  • @VenkateshKonatham 我已经尝试过了,每次我选择一个选项时它都没有响应。没有任何效果或显示。
  • &lt;?php echo 'var Code = ["", "'.json_encode($fwelcome).'","'.json_encode($fbilling).'","'.json_encode($freply).'","'.json_encode($fdelivery).'"];';
  • 停止使用已弃用的 mysql_* API。使用 mysqli_* 或 PDO。然后,您可以避免与此库相关的安全问题,并使用参数化查询来正确保护自己免受 SQL 注入攻击。尽管此处显示的查询不易受到攻击,但您编写的任何依赖变量来完成查询的内容都将很容易遭到黑客攻击。 mysql_ 在 PHP7 中也被完全删除了,所以当你升级到这个版本时,你的代码将完全停止工作。

标签: javascript php html echo


【解决方案1】:

您好,您有 html 内容,您可以按照以下流程获取 html 并将其作为参数发送给函数。

    <div class="col-md-4">
      <div class="form-group">
        <?php             
                            $sql3="SELECT * FROM email WHERE id='1'";
                            $result3=mysql_query($sql3) or die(mysql_error());
                            $rwsf=  mysql_fetch_array($result3);
                            $fwelcome= $rwsf[3]; 
                            $freply= $rwsf[2]; 
                            $fbilling= $rwsf[1]; 
                            $fdelivery= $rwsf[4]; 
                            ?>
        <label>Email Templates: </label>
        <select name="message" onChange="change();" class="form-control select2 required" style="width: 100%;">
          <option disabled selected>Click To Select</option>
          <option value="1">Welcome Email</option>
          <option value="2">Billing Email</option>
          <option value="3">Basic Reply Email</option>
          <option value="4">Delivery Process Email</option>
        </select>
      </div>
    </div>
    </div>


    <div class="row">
      <div class="col-md-12">
        <div class="form-group">
          <input type="text" name="subject" placeholder="Subject" class="form-control required">
        </div>
      </div>
    </div>
    <textarea id="editor1" name="editor1" rows="10" cols="80">Select your mail design from the 'Email' drop down list above.</textarea><br>

    <div class="form-wizard-buttons">
      <button type="submit" class="btn btn-success" style="border:0px"><i class="fa  fa-send"> Send Mail</i></button>
    </div>
   <div name="fwelcome_content">
     <?php echo $fwelcome; ?>
   </div>
   <div name="fbilling_content">
     <?php echo $fbilling; ?>
   </div>
   <div name="freply_content">
     <?php echo $freply; ?>
   </div>    
   <div name="fdelivery_content">
     <?php echo $fdelivery; ?>
   </div>

然后在javascript中

var Code = new Array();
window.onload = function(e){     
   Code = new Array("", getHTMLContent("fwelcome_content"), getHTMLContent("fbilling_content"), getHTMLContent("freply_content"), getHTMLContent("fdelivery_content"));
}
function change() {
  var ID = formconteudo.message.options[formconteudo.message.selectedIndex].value;
  CKEDITOR.instances.editor1.setData('<p>' + Code[ID] + '</p>');
}
function getHTMLContent(elementId){
  var htmlContent = document.getElementsByName(elementId)[0].innerHTML;
  document.getElementsByName(elementId)[0].remove();
  return htmlContent;
}

【讨论】:

  • 为什么不&lt;option value="fbilling"...function change(sel) { var val = sel.value?document.getElementById(sel.value+"_content").innerHTML:""; CKEDITOR.instances.editor1.setData('&lt;p&gt;' + val + '&lt;/p&gt;');
  • 先看看他的问题是什么,他在将 html 发送到新数组时遇到问题,所以我在那里进行了更改
  • 兄弟,我复制了你的源代码并用我的替换了它,但它阻止了页面加载。
  • 您是否在调试日志中看到任何错误?可能有错字问题
  • @DanielC。我刚刚更新了我的答案并在我的本地进行了测试。它按预期工作,在问题是元素没有被加载之前。因此,在加载时将一些代码移入以确保我们在页面加载后获得 html。对此我很抱歉
猜你喜欢
  • 2018-04-02
  • 2015-02-06
  • 2023-04-02
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 2019-07-24
相关资源
最近更新 更多