PHP:htmlspecialchars,但保留HTML实体

时间:2015-06-12 02:32:53

标签: php html-entities htmlspecialchars

我一直致力于一个小型项目,它将Skype日志格式化,使它们看起来不错。这很好,但我在路上遇到了一些令人讨厌的事情。

Here是一个很好的(有点淫秽)的例子。如您所见,htmlspecialchars()还将HTML字符代码转换为字符串(因为&变为&)。我想知道是否有办法让HTML实体仍然通过htmlspecialchars保留?

2 个答案:

答案 0 :(得分:0)

如果它可以解决您的问题,您可以使用htmlentities(),否则将字符串存储在一个从函数返回的变量中,然后在打印该字符串时

 {% block bottom_js %}
    {{ block.super }}
    <script src="https://checkout.stripe.com/v2/checkout.js"></script>
    <script type="text/javascript">
    $('#apply-coupon').on('click', function (e) {
        $.ajax({
        type: 'GET',
        url: '{% url 'stripecoupon' %}',
        data: { coupon_code : $('#discount-field').val() },
        success: function(results){
          $('#discount-field').val('');
          if (results) {
            $('#coupon-msg').html("Valid code.")
            // Do something here to send results to StripeCheckout?
          }
          else {
            $('#coupon-msg').html("Invalid code.")
          }
        }
        });
    });

    $(function() {
        $('body').on("click", '.djstripe-subscribe button[type=submit]', function(e) {
          e.preventDefault();
          // retrieve current $(".djstripe-subscribe")
          var $form = $(e.target).parents('form'),
              token = function(res) {
                $form.find("input[name=stripe_token]").val(res.id);
                $("button[type=submit]").attr("disabled", "true");
                $('#in-progress').modal({"keyboard": false})
                $('.progress-bar').animate({width:'+=100%'}, 2000);
                $form.trigger("submit");
              };
          StripeCheckout.open({
            key:         '{{ STRIPE_PUBLIC_KEY }}',
            email:       '{{ user.email }}',
            name:        'Premium Subscription',
            description:  'Curated Monthly Content',
            panelLabel:  'Subscribe',
            // amount: whatever the coupon code's percent_off or amount_off is.
            token:       token,
            // coupon: coupon
          });
          return false;
        });
          {% if PLAN_LIST|length > 1 %}
            $('.djstripe-change-plan').click(function(e){
                $("button[type=submit]").attr("disabled", "true");
                $('#in-progress').modal({"keyboard": false})
                $('.progress-bar').animate({width:'+=100%'}, 2000);
                var $form = $(this);
                $form.trigger("submit");
            });
          {% endif %}
    });
    </script>
    {% endblock %}

答案 1 :(得分:0)

使用此功能:

$string=$_POST[pname];
function seoUrl($string) {
    //Lower case everything
    $string = strtolower($string);
    $string = str_replace('&',' ',$string);
    $string = preg_replace("/[^a-z0-9_\s-]/", "", $string);
    $string = preg_replace("/[\s-]+/", " ", $string);
    $string = preg_replace("/[\s_]/", "-", $string);
    return $string;
}
$sclean=seoUrl($string);

您可以使用str_replace('&',' ',$string); 代替&使用您要删除的字符 ...