PHP将特殊字符转义为html

PHP将特殊字符转义为html,php,html,htmlspecialchars,Php,Html,Htmlspecialchars,我有一个字符串,看起来像“v\u00e4lkommen till mig”,在对字符串执行utf8\u encode()后得到的 我想让那根绳子变成 välkommen till mig 角色在哪里 \u00e4 = ä = ä 如何在PHP中实现这一点?编辑:由于您希望保留HTML字符,而我现在认为您的源字符串与您发布的不完全相同(我认为它是实际的unicode,而不是以字符串形式包含\unnn),因此我认为您最好的选择是: $html = str

我有一个字符串,看起来像“v\u00e4lkommen till mig”,在对字符串执行utf8\u encode()后得到的

我想让那根绳子变成

 välkommen till mig
角色在哪里

  \u00e4 = ä = ä

如何在PHP中实现这一点?

编辑:由于您希望保留HTML字符,而我现在认为您的源字符串与您发布的不完全相同(我认为它是实际的unicode,而不是以字符串形式包含
\unnn
),因此我认为您最好的选择是:

$html = str_replace( str_replace( str_replace( htmlentities( $whatever ), '&lt;', '<' ), '&gt;', '>' ), '&amp;', '&' );
然后编码为HTML:

$html = htmlentities( $decoded );
当然,你也可以不用变量:

$html = htmlentities( utf8_decode( $whatever ) );

要通过正则表达式实现这一点(不推荐,可能速度较慢,可靠性较低),您可以使用HTML支持
&#xnnnn构造,其中
nnnn
与现有的
\unnn
值相同。所以你可以说:

$html = preg_replace( '/\\\\u([0-9a-f]{4})/i', '&#x$1;', $whatever )
  • 不要使用utf8(de | en)代码。它只是从UTF8转换为ISO-8859-1,然后再转换回来。ISO 8859-1没有提供与ISO-8859-15或Windows1252相同的字符,这是最常用的编码(UTF-8除外)。最好使用mb_转换_编码

  • “v\u00e4lkommen till mig”>此字符串看起来像一个JSON编码的字符串,它已经是utf8编码的。“ä”的unicode代码位置为U+00E4>>\u00e4

例子
html\u实体解码
对我很有用

$json = '"v\u00e4lkommen till mig"';
echo $decoded = html_entity_decode( json_decode($json) );

您需要对其进行解码并使用
htmlentities
Hi重新编码,您的第一个解决方案可以正常工作。但问题是(很抱歉之前没有说)我的字符串中也有html标记,因此字符串可以是这样的“vä;lkommen

”,解决方案是“在这种情况下,您需要为
&
添加特殊情况(进行最终替换以将其转换回来)或者使用正则表达式。如果这是用户提交的输入,更常见的选择是使用受限标记,最后一步仅将其转换为HTML。谢谢,尝试了正则表达式,但似乎不起作用。您测试过吗?@mr.axelander我测试过了,但我想您的原始格式可能会有一些混乱。您可能更好幸运的是:或者看看我的编辑。我仍然不太确定你的源字符串是什么,但我相信这行行行会起作用。正如他在对我的回答的评论中指出的,他希望保持
不变,所以你的
htmlentities
选项需要对此进行调整。将文档作为UTF-8提供应该可以。我没有输出text/html。内容类型为text/plain,输出在Android应用程序中使用。是的,我使用的是json_decode.Hm。当您使用json_decode时,u00e4不应该再出现在这个字符串中。您可以在utf8中同样提供text/plain:
内容类型:text/plain;charset=utf-8
(但我不明白,因为您的输出显然是html)。请为我们提供更多代码,以便我们能够更轻松地帮助您;)
<?php
header('Content-Type: text/html; charset=utf-8');
$json = '"v\u00e4lkommen till mig"';
var_dump(json_decode($json)); //It will return a utf8 encoded string "välkommen till mig"
<?php
$json = '"v\u00e4lkommen till mig"';
$string = json_decode($json);
echo htmlentities($string, ENT_COMPAT, 'UTF-8');
$json = '"v\u00e4lkommen till mig"';
echo $decoded = html_entity_decode( json_decode($json) );