由于该应用程序的特殊性,我必须将JSON响应从外部应用程序从UTF-8转换为Windows-1251,所以这是必须的。
iconv("utf-8", "windows-1251", $element->text)
由于这些细节,我还必须将响应中的特殊符号(?,!等)从“正常”转换为html实体。但是很明显,如果我使用iconv("utf-8", "windows-1251", htmlspecialchars($element->text)
,那么响应中的所有文本都会被转换,因此我无法验证响应。那么,如何仅将htmlspecialchars
应用于特殊符号而不应用于所有响应?我知道它必须与正则表达式有关,但是我不太想象我在这里必须做什么。
答案 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
仅在此处使用,以便您在浏览器中查看结果时可以查看这些实体,当然您实际上并没有将其应用于变量脚本需要做什么。)
[]内的字符列表可以追加,如果任何一个字符在正则表达式中具有特殊含义,您只需要使用反斜杠进行适当的转义即可。