无法逃避XML中的单引号

时间:2013-12-02 13:40:20

标签: javascript php ajax xml escaping

请帮我解决这个问题。我有一个生成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功能.. 请帮忙,已经失去了一整天,谢谢

2 个答案:

答案 0 :(得分:0)

请注意,htmlspecialchars()也会转义<>。您必须分别在每个值上使用它,而不是在完整的html片段上使用它。

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

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

Ouptut:

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

但是最好使用DOM并让它来处理转义。

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

答案 1 :(得分:0)

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

$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;\" > 

第二个\'是不匹配的,双重引用\"不应该被转义,因为我可以看到更改,也许它对您有用。