php - 在 iconv 中使用 htmlspecialchars 仅转换特殊字符
问题描述
由于该应用程序的特殊性,我必须将来自外部应用程序的 JSON 响应从 UTF-8 转换为 windows-1251,所以这是必须的。
iconv("utf-8", "windows-1251", $element->text)
由于这些细节,我还必须将响应中的特殊符号(?、!等)从“正常”转换为 html 实体。但显然,如果我使用iconv("utf-8", "windows-1251", htmlspecialchars($element->text)
,那么响应中的所有文本都会被转换,并且我无法验证响应。那么如何htmlspecialchars
仅应用于特殊符号而不应用于所有响应?我知道它一定与正则表达式有关,但我不太想象我必须在这里做什么。
解决方案
这是一个使用 preg_replace_callback 替换单个匹配字符的快速示例,用于&#NN;
从字符ord
中获取NN
部分:
$text = 'abc!def?ghi';
$text = preg_replace_callback('#[!?]#', function($matches) {
return '&#'.ord($matches[0]).';';
}, $text);
echo htmlspecialchars($text); // will result in abc!def?ghiabc!def?ghi
(htmlspecialchars
仅在此处使用,以便您在浏览器中查看结果时可以看到这些实体,当然您实际上并没有在脚本需要执行的上下文中将其应用于变量。)
可以附加 [] 内的字符列表,如果任何字符在正则表达式中具有特殊含义,您只需要使用反斜杠进行适当的转义即可。
推荐阅读
- r - 循环嵌套列表的名称以创建一个数据框
- c++ - 如何将任意大的持续时间转换为纳秒精度的持续时间而不会溢出?
- python-3.x - Snakemake 收集前一个规则的输出作为第二个规则的输入
- spring - 我的 spring 应用程序无法连接到 kafka 代理
- html - 无法将内部引导卡 img 弯曲到与外部引导卡 img 相同的高度
- android - 如何在 Android 上制作弹跳动画?
- c# - c#更好的搜索没有延迟
- javascript - 使用 JsDoc 转换 Typescript
- powershell - Powershell 删除文件名中的第 n 个字符
- r - 如果缺少一个向量,如何删除 3 个向量中的元素?