遇到撇号时,工具提示会被破坏

时间:2012-08-02 12:51:40

标签: php mysql html html5 tags

我想显示link个图片,他们的title属性来自MySQL数据库:

for ($i=0; $i<$ret['cnt']; $i++)
{
    $html .= "<td width='15'><a href='" . HTTP_MAIN . $ret[$i]['menu_url'] . "?action=".$ret[$i]['menu_action']."'><img src='" . HTTP_ICONES . $ret[$i]["menu_icone_img"] . "' title='".$ret[$i]["menu_icone_title"] . "' width='12' height='12'></a></td>";
}

正如您所见,title属性来自$ ret [$ i] [“menu_icone_title”]。这是查询:

$sSQL = "SELECT menu_icone_img, menu_icone_title, menu_url, menu_action
                FROM menu 
                WHERE menu_icone_flag = 1
                ORDER BY menu_icone_ordre";

        $this->db->query($sSQL) ;
        $ret['cnt'] = $this->db->num_rows();
        $i = 0;
        while ( $this->db->next_record() ) {
            $ret[$i]["menu_icone_img"]  = stripslashes($this->db->f('menu_icone_img'));
            $ret[$i]["menu_icone_title"] = stripslashes($this->db->f('menu_icone_title'));
            $ret[$i]["menu_url"]    = stripslashes($this->db->f('menu_url'));
            $ret[$i]["menu_action"] = stripslashes($this->db->f('menu_action'));
            $i++;
        }

问题是“menu_icone_title”列内有撇号,如Initialisation des niveaux d'activités

因此,在运行时,工具提示已被破坏:Initialisation des niveaux d

那么如何显示所有文字?

2 个答案:

答案 0 :(得分:2)

只需替换:

$ret[$i]["menu_icone_title"]

通过

str_replace("'","\\'",$ret[$i]["menu_icone_title"]);

答案 1 :(得分:0)

HTML应该在任何PHP之外。 E.g。

<?php 
function cleantext ($string) {
  return htmlentities($string);
}

for ($i=0; $i<$ret['cnt']; $i++)
{
    ?>
    <td width="15">
       <a href="<?php echo HTTP_MAIN . cleantext($ret[$i]['menu_url']); ?>?action=<?php echo $ret[$i]['menu_action'];?>">
         <img src="<?php echo HTTP_ICONES . cleantext($ret[$i]["menu_icone_img"]); ?>" title="<?php echo cleantext($ret[$i]["menu_icone_title"]); ?>" width="12" height="12" />
       </a>
    </td>
  <?php
}
?>

它使您的代码更易于阅读/维护。

我还在任何输出周围添加了一个函数,它会为你清理输出。目前所有这个功能都在对字符串执行htmlentites,但是如果/需要的话,您可以轻松扩展它。