Php 允许htmlspecialchars呈现UTF-8字符,同时仍转义常规标记

Php 允许htmlspecialchars呈现UTF-8字符,同时仍转义常规标记,php,html,utf-8,htmlspecialchars,html-sanitizing,Php,Html,Utf 8,Htmlspecialchars,Html Sanitizing,我使用htmlspecialchars来转义在页面上呈现的用户输入,因此,如果您想要粗体文本,请将其环绕在这样一个标记周围,实际上以这种方式呈现,而不是将其解释为实际的html并像这样粗体标记文本 htmlspecialchars在这里工作得很好,但似乎错误地将UTF8字符作为htmlentity数字代码。例如,不赞成的表情ಠ_ಠ 呈现为&3232_&3232; 在完成函数之后 我应该怎么做才能正确地转义常规html,但仍然允许用户使用特殊的UTF8字符?您是否设置了正确的编码 utf8字符是否

我使用htmlspecialchars来转义在页面上呈现的用户输入,因此,如果您想要粗体文本,请将其环绕在这样一个标记周围,实际上以这种方式呈现,而不是将其解释为实际的html并像这样粗体标记文本

htmlspecialchars在这里工作得很好,但似乎错误地将UTF8字符作为htmlentity数字代码。例如,不赞成的表情ಠ_ಠ 呈现为&3232_&3232; 在完成函数之后


我应该怎么做才能正确地转义常规html,但仍然允许用户使用特殊的UTF8字符?

您是否设置了正确的编码

utf8字符是否可能已转换为的符号ಠ? 如果在该字符串上再次调用htmlspecialchars,&将成为一个-,因此不再是utf8代码,可以通过将double encode参数设置为false来防止这种情况。请参阅php.net上的文档:


&3232;_&3232; 应在页面上呈现为ಠ_ಠ 无论是在段落标记、输入框、文本区域中,都将以相同的方式呈现为>。。。你是说你只是不希望这些转换发生?这给你带来了什么问题?除了在指定的字符集上使用str_replace或一些时髦的正则表达式之外,没有一种真正简单的方法可以选择性地编码字符。我担心要么全是,要么什么都不是_&3232; 呈现为&3232_&3232; 在html和屏幕上。也许我在我的页面上遗漏了一些应该将这些html实体呈现为字符的内容。嗯。。。你能在什么地方贴一个测试页吗?或者将html转储到此处或JSFIDLE?