2

我的字符串看起来像“v\u00e4lkommen until mig”,我在对字符串执行 utf8_encode() 后得到。

我希望那根弦变成

 välkommen till mig

角色在哪里

  \u00e4 = ä = ä

我怎样才能在 PHP 中实现这一点?

4

3 回答 3

3
  • 不要使用 utf8_(de|en) 代码。它只是从 UTF8 转换为 ISO-8859-1 并返回。ISO 8859-1 不提供与 ISO-8859-15 或 Windows1252 相同的字符,它们是最常用的编码(除了 UTF-8)。最好使用 mb_convert_encoding。

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

例子

<?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"

这个字符串的来源是什么?

无需将ä替换为其 HTML 表示ä ,如果您将其打印在 utf8 编码的文档中并告诉浏览器使用的编码。如果有必要,请使用htmlentities

<?php
$json = '"v\u00e4lkommen till mig"';
$string = json_decode($json);
echo htmlentities($string, ENT_COMPAT, 'UTF-8');
于 2013-08-10T14:47:03.160 回答
0

编辑:由于您想保留 HTML 字符,并且我现在认为您的源字符串与您发布的不完全一致(我认为它是实际的 unicode,而不是包含\unnnn为字符串),我认为您最好的选择是:

$html = str_replace( str_replace( str_replace( htmlentities( $whatever ), '&lt;', '<' ), '&gt;', '>' ), '&amp;', '&' );

(注:不打电话给utf8-decode

原答案:

没有直接转换。首先,再次解码:

$decoded = utf8_decode( $whatever );

然后编码为 HTML:

$html = htmlentities( $decoded );

当然,您可以在没有变量的情况下做到这一点:

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

http://php.net/manual/en/function.utf8-decode.php

http://php.net/manual/en/function.htmlentities.php

&#xnnnn;要通过正则表达式执行此操作(不推荐,可能较慢,不太可靠),您可以使用 HTML 支持构造的事实,其中nnnn与您现有的\unnnn值相同。所以你可以说:

$html = preg_replace( '/\\\\u([0-9a-f]{4})/i', '&#x$1;', $whatever )
于 2013-08-10T14:19:49.060 回答
0

html_entity_decode为我工作。

$json = '"v\u00e4lkommen till mig"';
echo $decoded = html_entity_decode( json_decode($json) );
于 2018-05-03T21:39:07.820 回答