PHP相当于Java';s unescapeJava()函数

PHP相当于Java';s unescapeJava()函数,php,unicode,character-encoding,Php,Unicode,Character Encoding,以下Java函数的PHP等价物是什么 str = org.apache.commons.lang.StringEscapeUtils.unescapeJava(str); 此功能出现在中,以下是该功能的说明 取消扫描字符串中找到的任何Java文本。例如,它将 将“\”和“n”序列转换为换行符,除非 “\”前面有另一个“\” 编辑 我找到的一个解决办法是 echo json_decode('"' . $str . '"'); 但我认为应该有其他优雅的解决方案 编辑2 正如@julp所建议的,t

以下Java函数的PHP等价物是什么

str = org.apache.commons.lang.StringEscapeUtils.unescapeJava(str);
此功能出现在中,以下是该功能的说明

取消扫描字符串中找到的任何Java文本。例如,它将 将“\”和“n”序列转换为换行符,除非 “\”前面有另一个“\”

编辑

我找到的一个解决办法是

echo json_decode('"' . $str . '"');
但我认为应该有其他优雅的解决方案

编辑2


正如@julp所建议的,
translitate
是另一个选项,但它只适用于PHP5.4及更高版本。不幸的是,我仍然使用PHP5.3,需要一个能够在PHP5.3中工作的解决方案。PHP5.3与Java字节数组是等价的。它们(根据定义)是256位字符集(字节0x00-0xff)。然而,PHP字符串语法已经在双引号字符串()中提供了某些转义字符序列的插值

但是,如果您正在接收JSON编码的字符串,JSON_decode函数将正确地将该字符串解码为PHP(前提是它符合JSON规范)


使用PHP>=5.4和intl扩展名,您就有了
音译器
类:

$in = '\u0041\U00000062';
$out = transliterator_create('Hex-Any')->transliterate($in);
var_dump($out); # string(2) "Ab"

PHP使用双引号内的字符串自动执行此操作
@Dale当我使用unicode字符,如
\u2002
等时,它不会执行此操作。@Sudar php不支持
\uxxx
-escapesequences@Esailija虽然PHP字符串语法不支持unicode转义序列,但PHP的json_解码函数将正确地将这些字符解码为有效字节。例如
var_dump(json_decode(“\u2002”)
将返回一个3字节的字符串,该字符串正确地表示那些unicode字节。@GoogleGuy是的,但它不是那么简单,您现在需要
escapeJSONString
functionYeah
json\u deocde
是一个选项。但我想看看是否有更好的方法来做这件事。我不知道。可能有一些用PHP编写的该函数的用户区实现,但PHP没有提供本机实现(至少在手册或PHP PECL存储库中找不到)。最好不要在PHP中使用序列化/转义字符串。改为发送字节数组字符串,否则您将不得不使用自己的取消转义函数。我忘记了所有关于intl:)不幸的是,我仍然使用PHP5.3,无法使用此解决方案:(
$in = '\u0041\U00000062';
$out = transliterator_create('Hex-Any')->transliterate($in);
var_dump($out); # string(2) "Ab"