在iconv中使用htmlspecialchars仅转换特殊字符

时间:2019-02-20 06:10:52

标签: php

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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