【问题标题】:impossible to escape single quotes in XML不可能在 XML 中转义单引号
【发布时间】:2013-12-02 13:40:20
【问题描述】:

请帮我解决这个问题。我有一个生成 XML 的 php 文件。我有以下代码,我无法在 XML 中转义 JS 脚本,如下所示:

$xml_after='<html>'.htmlspecialchars('    
<div class="options" id="options_'.$tables_row['id'].'">    
<a class="insidetable" href="" title="'.$lang['delete'].'" 
onClick="show_confirmation(\''.$messages['delete_table'].'\',\''.$lang['close'].'\',hide_element(\'confirmation\');\''.$lang['delete'].'\',remove_table(\''.$tables_row['id'].'\');hide_element(\'confirmation\');\');return false;\" ><img src="../images/interface/icons/delete.png" />    
</a></div>').'</html>';     

问题出在 onclick 函数中。 请帮忙,已经迷路了一整天,谢谢

【问题讨论】:

  • 停止尝试通过将字符串混合在一起来生成 XML。使用 XML 库。
  • 看起来更像 HTML,XML 没有 onclick 属性?
  • XML 具有您想要的任何属性。它不是 HTML(缺少标题元素)。
  • 伙计们,我没有附上完整的代码,包括标签、标题等,因为错误在这个片段中。删除它后,html 出现并工作,只是一个愚蠢的单引号转义问题。我尝试了很多方法来逃避它,但没有成功
  • 一般问题出在 show_confirmation() 函数中,因为它包含 3 个子函数,其中一个无法正确转义。如果我只删除 onclick ajax 发送正确的 html

标签: javascript php ajax xml escaping


【解决方案1】:

请注意,htmlspecialchars() 也会转义 &lt;&gt;。您必须在每个值上单独使用它,而不是在完整的 html 片段上。

htmlspecialchars() 有一个转义所有引号的选项。

 var_dump(htmlspecialchars("Escaping: <>&'\"", ENT_QUOTES));

输出:

string(35) "Escaping: &lt;&gt;&amp;&#039;&quot;"

但最好使用DOM 并让它负责转义。

另外,我建议在 HTML 中使用 data-* 属性。 Javascript 可以读取属性并将逻辑绑定到元素。这将实际的 JS 逻辑与 HTML 分开。

【讨论】:

  • 哪种类型的引用会逃脱 Thomas?单或两者兼而有之?
  • Thomas,ENT_QUOTES 没有帮助.. 还有其他建议吗?
【解决方案2】:

我认为您的代码格式不正确

$xml_after='<html>'.htmlspecialchars('<div class="options"
     id="options_'.$tables_row['id'].'">    

<a class="insidetable" href="" title="'.$lang['delete'].'" 
     onClick="
     show_confirmation(\''.$messages['delete_table'].'\',\''.$lang['close'].'
          \', hide_element(\'confirmation\');\''.$lang['delete'].'    
          \', remove_table(\''.$tables_row['id'].'\');
              hide_element(\'confirmation
          \');
      \');return false;\" > 

<img src="../images/interface/icons/delete.png" />    

</a></div>').'</html>';

show_confirmation 函数中的每个函数之后,您都有一个;,它在函数调用参数列表中无效

onClick函数的最后一行:

\');\');return false;\" > 

第二个\' 是无与伦比的,双引号\" 不应该被转义,据我所知改变它也许对你有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2016-10-02
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多