如何在 PHP json_encode 中转义撇号

How escape apostrophe in PHP json_encode

我正在将 json_encode 对象传递到按钮中。

 <button aria-controls="web-share-fallback" aria-expanded="false"
    class="c-share__link btn-link underline font-normal"
    data-js="web-share track" data-web-share='{{
    post.getWebShare()|json_encode }}' data-track-key="Web Share" data-track-data='[{"action": "web-share"}]'>

现在 getWebShare() returns 一个似乎在以下字符串中中断的数组。

can't 一词似乎导致字符串结束,从而阻止按钮启动。 json_encode 似乎没有解决这个问题。

  public function getWebShare() {
    foreach ($this->web_share as &$value) {
      $value = addslashes($value);
    }
    return $this->web_share;
  }

方法 addslashes 确实似乎是将 \ 添加到 can't 试图转义的单词,但它仍然破坏了完整的字符串,如上图所示。

如何处理以单撇号结尾的字符串?

函数json_encode仅将数据编码为有效的JSON格式。要使用 JSON 字符串(或与此相关的任何字符串)作为有效的 HTML 标签属性,您应该使用 htmlspecialchars 或等效的方式来处理它。

Twig 的 escape 过滤器应该适合您的情况。

<button aria-controls="web-share-fallback" aria-expanded="false"
    class="c-share__link btn-link underline font-normal"
    data-js="web-share track" data-web-share='{{
    post.getWebShare()|json_encode|escape }}' data-track-key="Web Share" data-track-data='[{"action": "web-share"}]'>