php 数字-PHP 字符串与数字的连接运算符

2023-08-20 0 3,237 百度已收录

在PHP中,字符串拼接是一个极其基础的操作,因为在Web开发中,我们经常需要拼接各种字符串来生成需要的HTML、CSS、JavaScript代码,或者拼接SQL语句等。 因此,对于PHP开发人员来说,掌握字符串拼接的方法非常重要。 PHP 提供了多种连接字符串的方法php 数字,其中最基本的是使用句点 (.) 运算符。 该运算符连接两个字符串并返回一个新字符串。 例如,以下代码连接两个字符串: ```$str1="Hello";$str2="world";$result=$str1."".$str2;echo $result;//输出:Helloworld `` `除了使用句点运算符之外,PHP 还提供了一种更高效的连接字符串的方式,即使用 .= 运算符。 该运算符将两侧的字符串连接到右侧字符串的末尾并返回一个新字符串。 例如php 数字,以下代码将一个字符串连接到另一个字符串的末尾: ```$str1="Hello";$str2="world";$str1.="".$str2;echo $str1;// 输出: Helloworld```在实际开发中,为了增强代码的可读性和可维护性,我们一般会使用模板引擎、框架等工具来处理字符串拼接。 例如,使用 Laravel 框架的 Blade 模板引擎,我们可以使用以下代码来连接字符串: ```{{$str1}}{{$str2}}``` 这将连接两个字符串并手动执行 HTML通配符以防止 XSS 攻击等安全问题。 不管怎样,字符串拼接是PHP开发中特别基础且常用的操作,熟练掌握它的使用可以提高开发效率和代码质量。

往期精选(欢迎转发~~)

在项目中,因为字符编码的问题,踩了很多坑。 以前踩过,现在继续踩着。 现在我总结一下它们。 我只希望我不要再踏入这个陷阱。 总结一下我踩过的坑:

1)将字段转换为json数据,json数据为null或者空字符串;

2)将字段转换为json数据,json中的汉字出现乱码;

3)当json数据嵌套时(数组是一个json,数组中的一个数组也是一个json字符串),json_decode失败;

1 基本概念

Unicode:(Unicode、Universal Code、Unicode)是计算机科学领域的行业标准,包括字符集、编码方案等。

UTF-8:是Unicode的变宽字符编码,也称为Unicode。 UTF-8 使用 1 到 4 个字节对 Unicode 字符进行编码。

GBK:汉字编码字符集。

json_encode:在PHP上将链表转换为json数据,仅支持utf8格式的数据;

json_decode:在PHP上将json数据转换为链表,转换后的链表为utf8格式;

2 UTF-8/GBK 和 json_encode

情况一:GBK–>UTF-8–>json_encode

代码如下所示:

$strTest = '测试用例';
$strConvet = iconv('GBK', 'UTF-8', $strTest);
var_dump($strConvet);
$strJson = json_encode($strConvet);
var_dump($strJson);

这里有两种情况需要讨论。 当数据$strTest为gbk格式时php字符,输出结果为:

string(12) "测试用例"
string(26) ""u6d4bu8bd5u7528u4f8b""

这里没有问题,数据是从gbk–>utf8–>json_encode,过程完全正确(解释一下,“u6d4bu8bd5u7528u4f8b”是unicode格式的php字符,即php进行json_encode时,它会手动将utf8格式的汉字转换为unicode格式,除了汉字之外,其他的都是按照utf8格式输出,具体是将汉字转换为unicode,虽然这个很有用,后面会讲到)。

如果数据$strTest是utf8格式,则输出结果:

string(18) "娴嬭瘯鐢ㄤ緥"
string(38) ""u5a34u5b2du762fu9422u3124u7de5""

出现乱码! ! ! 数据是从utf8->utf8–>json_encode,即数据$strTest是utf8格式,然后按照gbk的形式强制转为utf8,出现乱码。 虽然是乱码,但是始终是utf8格式,所以经过json_encode之后,还是会有输出结果。

情况2:UTF-8–>GBK–>json_encode

代码如下所示:

$strTest = '测试用例';
$strConvet = iconv('UTF-8', 'GBK', $strTest);
var_dump($strConvet);
$strJson = json_encode($strConvet);
var_dump($strJson);

如上所述,这里有两种情况需要讨论。 当数据$strTest为utf8格式时,输出结果为:

string(8) "测试用例"
string(4) "null"

没有出现乱码,但是json_encode后的数据为空! ! ! 数据是从utf8–>gbk–>json_encode,因为json_encode只接受utf8格式的数据,gbk数据不能直接转成json,只会输出null。

如果数据$strTest是utf8格式,则输出结果:

string(0) ""
string(2) """"

精光! ! ! 数据是从gbk->gbk–>json_encode,即将utf8格式的数据强行转换成utf8形式的gbk,直接转成空字符串。 那么空字符串json_encode仍然是一个空字符串。 (你可能会说这个空字符串是gbk格式的,按照上面的说法,json_encode后应该为null,我试了一下,英文字符不区分utf8和gbk格式,无论你怎么转换,输出仍然是英文字符)

通过前面的两种情况,准确的说是四种情况,我们基本可以明白为什么转码后会出现各种问题了。 综上所述,其实就是没有按照标准使用转码功能。

3 UTF-8/GBK和json_decode

其实核心的东西上面已经说了,但是json_decode的输入参数也必须是utf8格式。 只要保证了这一点,json_decode之后的数据就不会出现问题,但是在项目中,经过多次转码之后,并不能保证json_decode的输入参数是utf8格式,很容易出现乱码。 我举一个项目中遇到的反例。

项目示例:调用第三方socket会吐出一个json字符串给我。 这个json字符串就是一个字段,然后字段里面有一个数组也是一个json字符串。 更可怕的是,这个json字符串中的汉字并不是unicode格式的。 它是纯utf8格式。 样本数据如下:

{"ret":0,"msg":"OK","content":{"user_name":"","true_name":"{"materialType":"测试数据类型","materialFormat":"image"}"}}

json_decode后的数据:

{
    "ret": 0,
    "msg": "OK",
    "content": {
        "user_name": "",
        "true_name": "{"materialType":"测试数据类型","materialFormat":"image"}"
    }
}

因为在项目中,我们处理数据的格式是GBK,所以第三方数据会立即转换为GBK格式,但是如果后面需要使用数组true_name中的数据materialType,则需要单独对true_name进行json_decode ,因为我们之前已经通过 json_decoded 将其转换为gbk格式,所以这里使用json_decode肯定会出现问题(这就是为什么json数据中的汉字一般都会转换为unicode,如果汉字是unicode的话,就不会出现上述问题)。 为了解决这个问题,我们首先将第三方给我们的json数据转换成链表,然后分别对数组true_name进行json_decode,这样所有的数组就没有json数据了,然后将所有数据统一转换转成GBK格式。

最后补充一点,json_encode方法会手动将汉字转换成unicode格式。 如果由于某些特殊要求,需要将上面的汉字保留为utf8格式(一般不这样做,你会埋葬自己,我的意思是因为特殊要求,作为最后的手段),使用以下:

json_encode($arrInput, 'GBK', 'UTF-8'), JSON_UNESCAPED_UNICODE)

不过这里还有一个坑,看php帮助文档:

JSON_UNESCAPED_UNICODE这个参数只能在php5.4.0以上版本(包括5.4.0)使用。 如果你的离线机器是php5.4.0,在线机器是php5.4.0以下,这个坑可能会踩得很错!

总结:我一路踩了这些坑,估计以后还会有坑,但我觉得也不会好很多。 如果踩到其他坑,我会在影片博文中补充。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 数字-PHP 字符串与数字的连接运算符 https://www.wkzy.net/game/126928.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务