0

我想显示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

那么如何显示所有的文本呢?

4

2 回答 2

2

只需更换:

$ret[$i]["menu_icone_title"]

经过

str_replace("'","\\'",$ret[$i]["menu_icone_title"]);
于 2012-08-02T12:55:23.570 回答
0

HTML 真的应该在任何 PHP 之外。例如

<?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,但如果/需要时,您可以轻松扩展它。

于 2012-08-02T13:03:29.390 回答