javascript中的PHP转义

Posted

技术标签:

【中文标题】javascript中的PHP转义【英文标题】:PHP escape in javascript 【发布时间】:2016-01-10 11:19:45 【问题描述】:

我正在尝试从数据库查询中输出项目描述。

这段代码应该输出带有名称等的描述...

<?php

$type = "item";
$limit = 16;

$preparedStatement = $SQL->prepare('SELECT * FROM z_shop_offer WHERE offer_type = :type LIMIT :limit');

$preparedStatement->bindParam(':type', $type, PDO::PARAM_STR);
$preparedStatement->bindParam(':limit', $limit, PDO::PARAM_INT);
$preparedStatement->execute();

if ($preparedStatement->rowCount() > 0) 
        // Define how we want to fetch the results
        $preparedStatement->setFetchMode(PDO::FETCH_ASSOC);
        $iterator = new IteratorIterator($preparedStatement);

        foreach ($iterator as $item) 

        echo '
        <div class="ServiceID_Icon_Container" id="ServiceID_Icon_Container_'.$item['id'].'">

          <div class="ServiceID_Icon_Container_Background" id="" style="background-image:url('.$layout_name.'/images/serviceid_icon_normal.png);">

            <div class="ServiceID_Icon" id="ServiceID_Icon_'.$item['id'].'" style="background-image:url(' . $config['site']['item_images_url'] . $item['itemid1'] . $config['site']['item_images_extension'] . ');" onclick="ChangeService('.$item['id'].', 12);" onmouseover="MouseOverServiceID('.$item['id'].', 12);" onmouseout="MouseOutServiceID('.$item['id'].', 12);">

              <div class="PermanentDeactivated">
                <span class="HelperDivIndicator" onmouseover="ActivateHelperDiv($(this), \''.$item['offer_name'].'\', \''.htmlentities($item['offer_description']).'<BR><BR>\', \'\');" onmouseout="$(\'#HelperDivContainer\').hide();">
                  <div class="ServiceID_HelperDiv"></div>
                </span>
              </div>

            </div>
          </div>
        </div>
        ';

        

?>

我已经尝试过htmlentitieshtmlspecialcharsaddslashes

这是存储在数据库中的描述(在这个上,它停止显示带有描述的工具提示。

激活一小时 1.5 倍以上的经验。它只有一次充电。 在一个处于活动状态时使用任何其他注入只会堆叠它 时间而不是经验。如果您注销或 死。

如何正确转义/输出描述?

【问题讨论】:

在foreach里面,添加print_r($item);你看到了什么? 添加斜杠应该可以工作 Array ( [id] =&gt; 6 [points] =&gt; 25 [itemid1] =&gt; 23474 [count1] =&gt; 1 [itemid2] =&gt; 0 [count2] =&gt; 0 [offer_type] =&gt; item [offer_description] =&gt; Activate one hour of 1.5x more Experience. It has only one charge. Using any other injection while one is active will only stack it's time and not the experience. The time will not stop if you log out or die. [offer_name] =&gt; Experience Injection Tube [category] =&gt; 1 [bought] =&gt; 0 )这是第五项@Dagon @charlietfl addslashes 不适用于第 5 项 有些地方不对,因为 it's 在添加斜杠后应该看起来像 it\'s 【参考方案1】:

您可能遇到的问题是您需要双重转义数据。你需要:

首先为 HTML 转义它 秒为 javascript

尝试在你的描述字段上运行这个 PHP 函数:

function fix_js($string)

     return strtr(
              $string, 
              array(
                '\\' => '\\\\', 
                "'" => "\\'", 
                '"' => '\\"', 
                "\r" => '\\r', 
                "\n" => '\\n', 
                '</' => '<\/')
            );

如果它解决了您的问题,请告诉我们

【讨论】:

是的,效果很好!谢谢你,我希望我能给你声誉!

以上是关于javascript中的PHP转义的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript:闭包是不是可以通过值而不是像 PHP 中的引用来访问封闭范围内的变量?

PHP中的定界符

PHP中的多行字符串传递给JavaScript方法两则

javascript 怎么把字符串中的特殊符号转义

转义 JavaScript 字符串中的单引号以进行 JavaScript 评估

JavaScript 函数参数中的单引号转义