【问题标题】:PHP convert double quoted string to single quoted stringPHP将双引号字符串转换为单引号字符串
【发布时间】:2015-05-08 12:27:29
【问题描述】:

我知道这个问题在这里问了很多次。但是那个解决方案对我没有用。我今天非常严重地面临这个问题。

// Case 1
$str = 'Test \300';  // Single Quoted String
echo json_encode(utf8_encode($str)) // output: Test \\300

// Case 2
$str = "Test \300"; // Double Quoted String
echo json_encode(utf8_encode($str)) // output: Test \u00c0

我想要案例 2 的输出,并且我有单引号 $str 变量。该变量由 XML 字符串解析填充。并且该 XML 字符串保存在 txt 文件中。

(这里 \300 是 À(拉丁字符)字符的编码,我无法控制它。)

请不要给我上述静态字符串的解决方案

提前致谢

【问题讨论】:

    标签: php unicode-string


    【解决方案1】:

    这样就可以了:

    $string = '\300';
    
    $string = preg_replace_callback('/\\\\\d{1,3}/', function (array $match) {
        return pack('C', octdec($match[0]));
    }, $string);
    

    它匹配任何反斜杠序列,后跟最多三个数字,并将该数字从八进制数转换为二进制字符串。与"\300" 的结果相同。

    请注意,对于 转义转义,这不会完全一样;即 "\\300" 将产生文字 \300 而上面的代码将转换它。

    如果您希望所有遵循双引号字符串的可能规则而不手动重新实现它们,最好的选择是简单地eval("return \"$string\""),但这也有一些警告。

    【讨论】:

    • 非常感谢!!你是大师!!您的第一个解决方案对我有用,但是 eval("return \"$string\"") 对我不起作用。再次感谢
    【解决方案2】:

    愿你在寻找这个

    $str = 'Test \300';  // Single Quoted String
    echo json_encode(stripslashes($str)); // output: Test \\300
    

    【讨论】:

    • 我想要案例 2 的输出,但我在 $str 变量中有单引号字符串(如案例 1)。 (我已经在我的问题中提到过)
    猜你喜欢
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2011-07-08
    • 2021-08-07
    相关资源
    最近更新 更多