※ 引述《m7m123d ( )》之铭言:
: 在程式里用pdftotext的方式将PDF档转成UTF-8的txt文字档
: 接着抓出txt里面的一段文字
: $_str = '生日:066年11月28日';
: $_str = str_replace("生日:", '', $_str);
: $_str = str_replace("年" , '', $_str);
: $_str = str_replace("月" , '', $_str);
: $_str = str_replace("日" , '', $_str);
: echo $_str;
: Output:066年1128
: 我手动复制没被替换过去的“年”做替换,发现可行,
: google到是字符代码不相同的问题,这个状况第一次遇到,
: 想问一下版上大家有哪些经验,想伸个关键字,谢谢。
有这种状况的字其实不多
Unicode 有一区专门存放这种字: CJK Compatibility Ideographs U+F900~U+FAFF
http://unicode-table.com/en/sections/cjk-compatibility-ideographs/
http://www.unicode.org/charts/PDF/UF900.pdf
它是用来存放在 Unicode 所参照的来源编码里, 一个字被重复编码的状况
这时其中一个会对应到正常的字 (U+4E00~U+9FFF 里的)
另一个就会对应到这边来
状况中的"年"字是 U+F98E, UTF-8 编码是 EF A6 8E, PHP 可用 "\xEF\xA6\x8E" 表示
(记得用双引号, 否则 \x 会看不懂;
当然如果有这种字可复制也可以用复制的, 不过就要写个注解)
不过由于字不多加上会出现这种字只有很有限的状况, 碰到了再解就好...
(绝大多数情形下所输入的字都会先对映到正常的范围里
加上这区里的字有七成来自韩文编码
可以说除非文件曾经经过韩文编码不然几乎不会有这种字)