首页 > 解决方案 > 在 iconv 中使用 htmlspecialchars 仅转换特殊字符

问题描述

由于该应用程序的特殊性,我必须将来自外部应用程序的 JSON 响应从 UTF-8 转换为 windows-1251,所以这是必须的。

iconv("utf-8", "windows-1251", $element->text)

由于这些细节,我还必须将响应中的特殊符号(?、!等)从“正常”转换为 html 实体。但显然,如果我使用iconv("utf-8", "windows-1251", htmlspecialchars($element->text),那么响应中的所有文本都会被转换,并且我无法验证响应。那么如何htmlspecialchars仅应用于特殊符号而不应用于所有响应?我知道它一定与正则表达式有关,但我不太想象我必须在这里做什么。

标签: php

解决方案


这是一个使用 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仅在此处使用,以便您在浏览器中查看结果时可以看到这些实体,当然您实际上并没有在脚本需要执行的上下文中将其应用于变量。)

可以附加 [] 内的字符列表,如果任何字符在正则表达式中具有特殊含义,您只需要使用反斜杠进行适当的转义即可。


推荐阅读