1

PHP ブロック内の JavaScript イベント内で一重引用符と二重引用符を管理する方法を理解するのが困難です。

これはコードです:

<?php
$mainImagePath = '';
$galleryImages = $this->getGalleryImages();
if (count($galleryImages) > 0) {
    $gallery = '<div class="more-views">';
    $gallery .= '<h2>' . $this->__('More Views') . '</h2>';
    $gallery .= '<ul>';
    foreach ($galleryImages as $_image) {
        if ($_image->getFile() == $_product->getData('small_image')) {
            $mainImagePath = $this->getGalleryUrl($_image);
        }
        $gallery .= '<li>'
                 .  '<a href="' . $this->helper('catalog/image')->init($this->getProduct(), 'image', $_image->getFile()) . '" '
                 .  'rel="popupWin:\'' . $this->getGalleryUrl($_image) . '\', useZoom: \'cloudZoom\', smallImage: \'' . $this->getCloudImage($this->getProduct(), $_image) .  '\'" class="cloud-zoom-gallery" title="' . $this->htmlEscape($_image->getLabel()) . '" onmouseover="$(\'image\').src = "'.$this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $_image->getFile())->resize(256).'"; return false;">'
                 .  '<img src="' . $this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $_image->getFile())->resize(56) . '" width="56" height="56" alt="' . $this->htmlEscape($_image->getLabel()) . '" />'
                 .  '</a></li>';
    }
    $gallery .= '</ul></div>'; 
}
?>

問題は、値が二重引用符内にあることを期待onmouseoverするメソッドを持つイベントです.srcが、その文字列内に二重引用符を入れると残りが壊れます。

必要な値を変数に入れて変数をエコーし​​ようとしましたが、それもうまくいきませんでした。

そこで引用符を正しくエスケープするにはどうすればよいですか?

4

2 に答える 2

4
onmouseover="$(\'image\').src = "'.$this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $_image->getFile())->resize(256).'"; return false;">

一重引用符を使用する

onmouseover="$(\'image\').src = \''.$this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $_image->getFile())->resize(256).'\'; return false;">
于 2013-05-30T10:02:39.017 に答える
1

最初に html / javascript を書き出してから、php 変数を正しい場所に単純にエコーすることをお勧めします。エスケープを行う必要はなく、より保守しやすいコードになります。

IDE は構文の強調表示も正しく適用できます。

<?php

$mainImagePath = '';
$galleryImages = $this->getGalleryImages();

?>
<?php if(count($galleryImages) > 0) { ?>
<div class="more-views">
    <h2><?php echo $this->__('More Views'); ?></h2>
    <ul>
        <?php foreach ($galleryImages as $_image) { ?>
            <?php 

            if ($_image->getFile() == $_product->getData('small_image')) {
                $mainImagePath = $this->getGalleryUrl($_image);
            }

            ?>
            <li>
                <a href="<?php echo $this->helper('catalog/image')->init($this->getProduct(), 'image', $_image->getFile()); ?>" rel="popupWin:'<?php echo $this->getGalleryUrl($_image); ?>', useZoom: 'cloudZoom', smallImage: '<?php echo $this->getCloudImage($this->getProduct(), $_image); ?>'" class="cloud-zoom-gallery" title="<?php echo $this->htmlEscape($_image->getLabel()); ?>" onmouseover="$('image').src="<?php echo $this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $_image->getFile())->resize(256); ?>"; return false;">
                    <img src="<?php echo $this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $_image->getFile())->resize(56) ;?>" width="56" height="56" alt="<?php echo $this->htmlEscape($_image->getLabel()); ?>">
                </a>
            </li>
        <?php } ?>
    </ul>
</div>
于 2013-05-30T10:17:36.913 に答える