【问题标题】:magento escape string for javascriptjavascript的magento转义字符串
【发布时间】:2011-01-22 22:26:11
【问题描述】:

是否有一个辅助函数可以正确地将字符串转义为单引号引用的 JavaScript 字符串文字?

我知道 jsQuoteEscape,但它只处理引号,不处理 \n & \r 等。

所以如果我的字符串是'line1\nlineb'(即两行之间有一个换行符)

我用

var jsvar='<?php echo $this->helper('myextension')->jsQuoteEscape($mystring); ?>';

我会进入渲染的内容

    var jsvar='line1
line2';

这是一个语法错误。

谢谢, 埃亚尔

【问题讨论】:

    标签: php javascript json magento escaping


    【解决方案1】:

    是的

    $string = 'Hello
    There';                     
    var_dump( Mage::helper('core')->jsonEncode($string) );
    var_dump( json_encode($string) );
    

    我有never been clear 如果这种将非对象字符串数据类型编码为 javascript 字符串是 JSON 编码的副作用,或者如果它是真的,根据 Hoyle Crockford JSON,所以我总是喜欢在传递字符串时将它们包裹在一个对象中

    $o = new stdClass();
    $o->param = 'This is my 
    Param';         
    $json = json_encode($o);            
    echo 'var data = ' . $json . ';' . "\n";
    echo 'var jsdata = data.param';
    

    这就是您使用 javascript 处理此问题的方式。没有专门为此构建的方法。如果您有兴趣查看块中可用的辅助方法,请查看

    中的方法
    app/code/core/Mage/Core/Block/Abstract.php        
    app/code/core/Mage/Core/Block/Template.php        
    

    如果您正在处理的模板是链上更高块的一部分,请获取其类,然后检查其定义

    var_dump get_class($this);
    

    【讨论】:

    • 虽然,正如我在你自己的 Q 上回答的那样,字符串似乎不符合 json 的条件,但我觉得这有点过分了。 (至少在 javascript 方面的开销方面。如果您担心使用非对象调用 json_encode 我个人更愿意将字符串作为数组中的单个成员传递,然后从结果中修剪任何内容,包括第一个 [ 以及最后一个 ] 之后的任何内容。这导致 JS 正是你想要的,仅此而已。实际上,我怀疑(可能)如此广泛使用的东西是否会被破坏。
    • 也就是说,你会选择Mage::helper('core')-&gt;jsonEncode($string) 还是json_encode($string)?我倾向于选择第二个,因为它一方面更短,而且看起来它的开销要少得多,所以性能会更好。 (我假设第二个只是 PHP 的一部分?还是不是?)。
    • 你可能是对的,尽管每次我对自己说“我只会写这个简单的字符串替换,肯定不会有意外的边缘情况”,我最终被咬了边缘情况。因此,我养成了将任何动态 JS 变量作为 json 传递的习惯,如上所述。
    • @epeleg 是的,第二个是原生的PHP函数。第一个是 Zend_Json 中 Zend 的 json 编码方法的包装器,它最终只是调用 json_encode。那就是如果 json_encode 存在。如果不是(PHP
    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2010-10-20
    • 2020-11-15
    • 2014-01-27
    • 2015-05-31
    • 2011-03-16
    • 2012-08-24
    相关资源
    最近更新 更多