PHP和重音字符(Ba \ u015f \ u00e7 \ u0131l)

时间:2011-03-15 02:38:14

标签: php

我有一个像“Ba \ u015f \ u00e7 \ u0131l”这样的字符串。我假设那些是一些特殊的重音字符。我如何:

1)显示带重音的字符串(即用实际字符替换代码)

2)存储这样的字符串的最佳做法是什么?

2)如果我不想允许这样的字符,我该如何用“普通字符”替换它?

5 个答案:

答案 0 :(得分:3)

我有根据的猜测是你从JSON字符串中获取了这些值。如果是这种情况,您应该使用json_decode()正确解码整个数据:

<?php

header('Content-Type: text/plain; charset=utf-8');

$data = '"Ba\u015f\u00e7\u0131l"';
var_dump( json_decode($data) );

?>

答案 1 :(得分:1)

  1. 要显示字符,请查看How to decode Unicode escape sequences like "\u00ed" to proper UTF-8 encoded characters?

  2. 您可以存储这样的字符或解码,只需确保您的存储可以处理UTF8字符集。

  3. iconv与translit标志一起使用。

  4. 这是一个例子......     

    function replace_unicode_escape_sequence($match) {
        return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
    }
    $str = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $str);
    
    echo $str;
    
    echo '<br/>';
    $str = iconv('UTF8', 'ASCII//TRANSLIT', $str);
    
    echo $str;
    

答案 2 :(得分:0)

这是另一种选择:

<html><head>
    <!-- don't forget to tell the browser what encoding you're using: -->
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
</head><body><?php

$string = "Ba\u015f\u00e7\u0131l";
echo json_decode('"'.str_replace('"', '\"', $string).'"');

?></body></html>

这是有效的,因为\ u000语法是JSON使用的语法。请注意,json_decode()需要JSON模块,该模块现在是标准PHP安装的一部分。

答案 3 :(得分:0)

PHP中没有本机支持来解码此类字符串。

使用本机功能有几种技巧虽然我不确定其中任何一种都是安全且防注射的:

使用Zend Framework的另一个选择是下载Zend_Utf8提议类。请在Zend_Utf8 proposal for Zend Framework

查看更多信息

答案 4 :(得分:-1)

  1. 输出它们会输出相应的字符。如果您没有为输出文档提供任何编码,浏览器将尝试猜测要显示的最佳编码。否则你应该弄明白并明确输出。
  2. 只需存储它们,或将它们转换为普通字符并将其存储为二进制存储。
  3. 使用iconv函数从一种编码转换为另一种编码,然后您可以使用所需的编码保存源文件以支持它。
相关问题