遇到一个头痛的单双引号问题,有许多标签,从数据库里调出。放到一个 <a Onclick="javascript('$tags')">里。如何处理单双引号?用addslashes,只有single s的链接可以传递,另外2种超链均被破坏。尝试 "\\\"double s\\\"" 也无效。问如解决?为了方便,把数据库里调出的几种情况存为一个数组进行测试。<?php
header("Content-Type: text/html; charset=utf-8");
//$names 来自数据库
$names = array("\"double s\"","'single s'","\"'Mix both'\"");
print('<li><a href="javascript:void(0)" OnClick="javascript(\''.addslashes($names[0]).'\')">'.$names[0].'</a></li>');
print('<li><a href="javascript:void(0)" OnClick="javascript(\''.addslashes($names[1]).'\')">'.$names[1].'</a></li>');
print('<li><a href="javascript:void(0)" OnClick="javascript(\''.addslashes($names[2]).'\')">'.$names[2].'</a></li>');
?>
<?php echo $_POST['javascript']; ?>
<div id="tags"></div>

解决方案 »

  1.   

    $names = array("double s","single s","Mix both");foreach($names as $v)
     print('<li><a href="javascript:void(0)" OnClick="javascript(\''.$v.'\')">'.$v.'</a></li>').PHP_EOL;
    <li><a href="javascript:void(0)" OnClick="javascript('double s')">double s</a></li>
    <li><a href="javascript:void(0)" OnClick="javascript('single s')">single s</a></li>
    <li><a href="javascript:void(0)" OnClick="javascript('Mix both')">Mix both</a></li>
      

  2.   

    @xuzuning, 我的意思是:OnClick=javascript 里,标签里的文字一定要带上原来的单,双引号。如果去除掉原来的引号,则会失效。弱弱的问一下,如果用定界符呢?能不能解决问题?类似下面这种$link=<<<EOT
    <li><a href="javascript:void(0)" OnClick="javascript('addslashes($names[0])')">'$names[0]'</a></li>
    EOT;
    print($link);
      

  3.   

    定界符里面的就直接写HTML即可
      

  4.   

    我写的定界符,不能解决问题,还是会产生超链被破坏的情况。请问如何解决单双引号,使得OnClick可以正常传递:带单、双引号的文字?
      

  5.   

    我认为你可以将一些步骤拆开,例如addslashes根本就不必要放到js中去,明知不可为还为之^ _ ^
      

  6.   

    addslashes不放JS里,可以前期从数据库里引导出来时就处理。用定界符可以省掉一次引号的使用,然后设置数据库里引导出的文字为定义为 $names // "double s",'single s',"'Mix both'"再用str_replace替换$names里的单双引号。但是现在要怎样替换,才能使得OnClick可以正常传递:带单、双引号的文字?情况有点复杂,脑子想不过来了,所以求助。
      

  7.   

    太绕人的可以转换成html entities&quot; 和 &#39;
      

  8.   

    直接用html_entity_decode,
    还是用str_ireplace,换成&quot; 和 &#39; ?