gpt4 book ai didi

javascript - HTML 实体编码不适用于 esc_html() 和 wp_localize_script()

转载 作者:行者123 更新时间:2023-12-03 01:02:41 26 4
gpt4 key购买 nike

我正在尝试使用 wp_localize_script() 函数传递 JavaScript 对象,并期望对象中存在实体编码的字符串。以下是示例:

$params = array('str' => esc_html('this string has a < symbol and unclosed <td> tag'), 'change' => false);

wp_localize_script( 'custom_setup_js', 'custom_js_params', $params );

什么是输出?

/* <![CDATA[ */ var custom_js_params = {"str":"this string has a < symbol and unclosed <td> tag","change":""}; /* ]]> */

期望什么?

/* <![CDATA[ */
var custom_js_params = {"str":"this string has a &lt; symbol and unclosed &lt;td&gt; tag","change":""};
/* ]]> */

我做错了什么或者我误解了什么?因为我需要 JavaScript 对象来包含字符串中编码的 HTML。我已经在不使用 esc_html() 函数的情况下尝试过相同的操作,但没有成功。

PS:该字符串来自用户输入,因此需要转义。我只是跳过它以便更容易地陈述问题。

最佳答案

HTML 实体再次被解码的原因是 wp_localize_script 调用了 class.wp-scripts.php 中的 localize 方法,该方法具有该行:

$l10n[$key] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8');

此外,您的字符串将传递给 wp_json_encode,这将在执行 PHP json_encode 之前进行一些清理。

换句话说,您的字符串首先由 WP 清理,然后由 PHP 正确转义。根据您的用例,可能不需要自己进行任何额外的编码或转义。

关于javascript - HTML 实体编码不适用于 esc_html() 和 wp_localize_script(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52558193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com