3

我从 MySQL db varchar(255) utf8_general_ci 字段中获取数据,并尝试使用 PHP 将文本写入 PDF。我需要确定 PDF 中的字符串长度以限制表格中文本的输出。但我注意到mb_substr/的输出substr真的很奇怪。

例如:

mb_internal_encoding("UTF-8");

$_tmpStr = $vfrow['title'];
$_tmpStrLen = mb_strlen($vfrow['title']);
for($i=$_tmpStrLen; $i >= 0; $i--){
     file_put_contents('cutoffattributes.txt',$vfrow['field']." ".$_tmpStr."\n",FILE_APPEND);
     file_put_contents('cutoffattributes.txt',$vfrow['field']." ".mb_substr($_tmpStr, 0, $i)."\n",FILE_APPEND);
}

输出这个:

来自 npp 的屏幕截图

npp 文件链接

数据库:

在此处输入图像描述 在此处输入图像描述

我的问题是额外的字符来自哪里?

4

3 回答 3

1
于 2015-04-22T18:07:16.033 回答
1
  1. 您需要通过适当地设置连接编码来确保您实际上以 UTF-8 编码从数据库中获取数据。这取决于您的数据库适配器,详情请参阅UTF-8
  2. 您需要告诉您的mb_函数数据是 UTF-8 格式,以便他们可以正确处理它。使用 为所有函数全局设置此参数mb_internal_encoding,或者在$encoding调用时将参数传递给函数:

    mb_substr($_tmpStr, 0, $i, 'UTF-8')
    
于 2015-04-22T18:43:23.600 回答
0

除了将表和字段设置为 UTF-8 之外,您还需要将mysqli_set_charset('UTF-8')设置为 UTF-8(如果您使用的是 mysqli)。

你也试过了吗?

$_tmpStr = utf8_encode( $vfrow['title'] ); 
于 2015-04-22T16:50:17.207 回答