Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在UTF-8编码字符串上使用str_split_Php_String_Utf 8 - Fatal编程技术网

Php 在UTF-8编码字符串上使用str_split

Php 在UTF-8编码字符串上使用str_split,php,string,utf-8,Php,String,Utf 8,我目前正在做一个项目,我想我应该继续学习如何使用PDO,而不是使用常规的MySQL查询 我有一个名为Competities的表,数据库、表和所有列都在utf-8中。我在参赛者表中有十个条目,它们的“name”列包含像åäö这样的字符 现在,当我从数据库中获取一个条目,然后var_转储名称时,我得到了一个很好的结果,一个所有特殊字符都完好无损的字符串。但我需要做的是将字符串按字符分割,将它们放入一个数组中,然后洗牌 例如,我有以下字符串: TestÄåTån 当我运行str_split时,我会得到

我目前正在做一个项目,我想我应该继续学习如何使用PDO,而不是使用常规的MySQL查询

我有一个名为Competities的表,数据库、表和所有列都在utf-8中。我在参赛者表中有十个条目,它们的“name”列包含像åäö这样的字符

现在,当我从数据库中获取一个条目,然后var_转储名称时,我得到了一个很好的结果,一个所有特殊字符都完好无损的字符串。但我需要做的是将字符串按字符分割,将它们放入一个数组中,然后洗牌

例如,我有以下字符串: TestÄåTån

当我运行str_split时,我会得到数组中每个字符自己的键。唯一的问题是所有特殊字符显示如下:�, 这意味着数组将如下所示:

Array
(
    [0] => T
    [1] => e
    [2] => s
    [3] => t
    [4] =>  
    [5] => �
    [6] => �
    [7] => �
    [8] => �
    [9] => �
    [10] => �
    [11] =>  
    [12] => T
    [13] => �
    [14] => �
    [15] => �
    [16] => �
    [17] => n
)
正如您所看到的,它不仅会弄乱字符,还会在stru分割过程中复制字符。我尝试了几种方法来分割字符串,但它们都有相同的问题。当我在分割之前输出字符串时,它会很好地显示特殊字符

这是我的dbConn.php代码:

//需要配置文件: 一次需要_('config.inc.php')

这是我用来从数据库和循环中获取的代码:

// Require files:
require_once('dbConn.php');

// Get random artist:
$artist = $dbHandle->query("SELECT * FROM ".ARTIST_TABLE." WHERE id = 11 ORDER BY RAND() LIMIT 1");
$artist->setFetchMode(PDO::FETCH_OBJ);
$artist = $artist->fetch();
var_dump($artist->name);

// Split name:
$artistChars = str_split($artist->name);

我正在连接utf-8,我的php文件是utf-8,没有BOM,并且此页面上没有其他特殊字符共享此问题。什么地方可能出错,或者我做错了什么?

不适用于多字节字符,它只返回第一个字节-从而使字符无效。您可以使用。

str\u split函数按字节而不是按字符分割。您需要。

请注意,您的连接字符串中使用的utf8声明被报告为不起作用。 在php.net上的评论中,我经常看到以下备选方案:

$dbHandle = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8", $dbUser, $dbPass,
                    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));

这是我的工作。。。希望它有用

确保数据库、apache和每个配置都使用utf8

PDO对象

            $dsn = 'mysql:host=' . Config::read('db.host') . ';dbname=' . config::read('db.basename') .';charset=utf8'. ';port=' . Config::read('db.port') .';connect_timeout=15';
            $user = Config::read('db.user');
            $password = Config::read('db.password');
            $this->dbh = new PDO($dsn, $user, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
            $this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
如果不使用str_word_count这样的函数,它就可以工作

使用str_word_count,您需要使用utf8_解码(utf8_编码)

函数cortar($str)
{
如果(20>$count=str\u word\u count($str)){
返回$str;
}
其他的
{
$array=str|u word_count($str,1,,-0123456789()+=?!!*;
$s='';
$c=0;
foreach($e作为数组){
如果(20>c美元){
如果(19>$c){
$s.=$e.';
}
其他的
{
$s.=$e;
}               
}
$c+=1;
}
返回utf8_解码(utf8_编码($s));
}
}
函数返回20字字符串。

UTF-8 PHP函数的问题与解决方案 1.如何拯救UTF-8租船人(数学字符串,特殊字符,如92÷8÷2=?)?

Ans.$string=utf8_编码('92÷8÷2=?');

2.如何从数据库中打印UTF-8租船人?

Ans.回声utf8_解码($string);

注意:如果您不想使用编码/解码进行此操作,可以通过

1.如果您使用的是mysqli_query(),那么 2.如果您正在使用PDO,则
使用PDO的UTF-8

向数据库中写入国际(甚至是中文和泰国)字符时出现的问题

可能有更多的方法来实现这一点。我不是专家,只是一个技术怪胎,有兴趣了解所有这些。在Linux和Windows中,我使用以下网站的示例设置了一些CMS(内容管理系统):

''

该示例使用PDO进行插入、更新和删除

我花了几个小时找到了一个解决方案。无论我做什么,我总是总结出我表格中的数据与phpmyadmin/heidi-View中的数据之间的差异

我遵循了以下提示:'',但仍然没有成功

在我的CMS结构中有一个文件“Config.php”: 看完这个网页后,我换了一行

    define( 'DB_DSN', 'mysql:host=localhost;dbname=mythings);

    define( 'DB_DSN', 'mysql:host=localhost;dbname=mythings;charset=utf8');

现在一切正常。

我的数据库结构中存储产品描述的文本字段只有问题。我将字段设置设置为blob而不是文本,这解决了我的问题。

您告诉我,我尝试使用mb_split,但它似乎有效,尽管我找不到合适的regexp,所以我最终使用了preg_split。$artistChars=preg_split('/(?@Jonathan,您可以尝试
mb_ereg()
函数,谢谢:)我最终使用了preg_split,如下所示:$artistChars=preg_split('/(?+1),我遇到了一个类似的问题,数据库中的an_被显示为� 在php中。向我的PDO连接中添加该附加参数修复了该问题。+1,我花了4个小时终于找到了导致问题的原因。在使用了php手册示例中的确切连接脚本之后,这怎么可能是问题?我现在对php开发团队非常生气……非常感谢您的回复。一百万个“谢谢”和更多。有一个类似的问题(没有字符串分割),结果是错误的� 在字符之间。这修复了它。幸运的是,我直接找到了这个答案,省去了我很多的痛苦!在PDO部分应该是charset=utf8。这就成功了!在我非常谦虚的假装观点中,这应该是最好的答案。
$conn = mysqli_connect('localhost','db_username','password','your_database_name');
mysqli_set_charset($conn,"utf8"); 
class Database extends PDO{
    function __construct() {
        parent::__construct("mysql:host=localhost;dbname=your_db_name","gurutslz_root","Your_db_password",array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
    }
}
$conn=new Database();
    define( 'DB_DSN', 'mysql:host=localhost;dbname=mythings);
    define( 'DB_DSN', 'mysql:host=localhost;dbname=mythings;charset=utf8');