我有一个问题,我似乎无法写出“某些”韩国字符。让我试着解释一下。这些是我采取的步骤。
MS Access DB文件(美国版)有一个包含韩文的表。我将此表导出为具有UTF-8编码的文本文件。我们称之为“A.txt”
当读取A.txt,存储在数组中,然后写入新文件(B.txt)时,所有字符都会正确显示。我在PHP脚本的最开始使用header("Content-Type: text/plain; charset=UTF-8");
。我只是使用fwrite($fh, $someStr)
。
当我在另一个脚本中读取B.txt并写入一个新文件(C.txt)时,有一个特定的列(显然在PHP代码中,我没有使用表或矩阵,但有效地说,当输出回原始文本文件格式时,导致字符显示如下:¸ì¹˜ ì–´ëœíŠ¸ 나ì¼ë¡
。整个列都有破碎的字符,因此如果我在文本文件中有5列,用逗号分隔并用双引号封装,则此列将破坏所有其他列的朝鲜语字符。如果我在编写文本文件时省略了这一栏,那一切都很顺利。
现在,我注意到某些PHP函数/操作会破坏Unicode字符。例如,如果我对任何韩语字符串使用preg_replace()并尝试fwrite(),它将会中断。但是,我没有执行任何我在其他字段/列上没有做过的事情(以文本文件格式说话),其他部分也没有被删除。
有没有人知道如何纠正这个问题?我以不同的方式尝试utf8_encode()
和mb_convert_encoding()
但没有成功。如果我的文件开头是UTF-8,那我甚至不需要阅读utf8_encode()
。我已经尝试将我的计算机语言设置为韩语..
我已经花了两天时间,这已经成了浪费时间。请帮忙!
更新:
我想我可能找到了罪魁祸首。在创建B.txt的脚本中,我将一个长的韩语字符串拆分为两个(使用字符串...<br /><br />...
作为指示符)并将它们分配给不同的列。我认为这种分裂操作最终会导致问题。
新问题:
如何在保留unicode的同时将这个长串分成两个?我曾经使用strpos()
和substr()
,但我读到mb_*()
函数可能就是我需要的东西。现在测试。
答案 0 :(得分:0)
尝试使用unicode修饰符(u)进行preg
http://php.net/manual/en/reference.pcre.pattern.modifiers.php
你好(PCRE_UTF8) 此修饰符打开与Perl不兼容的PCRE的其他功能。模式字符串被视为UTF-8。此修饰符可从Unix上的PHP 4.1.0或更高版本以及win32上的PHP 4.2.3获得。从PHP 4.3.5开始检查模式的UTF-8有效性。