0

link画像の sを表示したいのですが、それらの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 に答える