Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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:json_使用包含无效UTF8的字符串对dilema进行编码?对每个字符串进行utf8\U编码可以吗?_Php_String_Utf 8 - Fatal编程技术网

PHP:json_使用包含无效UTF8的字符串对dilema进行编码?对每个字符串进行utf8\U编码可以吗?

PHP:json_使用包含无效UTF8的字符串对dilema进行编码?对每个字符串进行utf8\U编码可以吗?,php,string,utf-8,Php,String,Utf 8,这是关于json_encode删除/取消包含非标准utf8字符串样重音字符的值 我已经阅读了许多不同的解决方案,并且概念化地创建了我自己的函数,作为一个整体解决方案,它将自动为我实现这一点 顺便说一下,我只希望有简单的英文字符串 基本上我需要一个函数来替换json_encode,这个函数将有一个例程来更正传递给实际json_encode函数之前传递的字符串/对象 所以问题是,这方面最好的常规是什么?最好的情况是,它考虑了最实际和最有效的方法 例如,我创建了一个例程,在该例程中,我分解字符串中的每

这是关于json_encode删除/取消包含非标准utf8字符串样重音字符的值

我已经阅读了许多不同的解决方案,并且概念化地创建了我自己的函数,作为一个整体解决方案,它将自动为我实现这一点

顺便说一下,我只希望有简单的英文字符串

基本上我需要一个函数来替换json_encode,这个函数将有一个例程来更正传递给实际json_encode函数之前传递的字符串/对象

所以问题是,这方面最好的常规是什么?最好的情况是,它考虑了最实际和最有效的方法

例如,我创建了一个例程,在该例程中,我分解字符串中的每个字符,计算其是否为有效的utf8,如果不是,则对其进行编码。。php.net的一位用户举例说明了这一点

这是一个字符对字符的检查和修复w/c似乎是防弹的

但我的问题是,这会影响性能

因此,另一种方法是对传递的每个字符串运行utf8_编码。。我考虑先检查每个值/字符串是否包含任何无效的UTF8字符,然后再对其运行UTF8_编码以节省开销。。但是,同样,每个检查例行程序本身也是一项开销

那么首先检查真的有必要吗?如果我只对通过函数传递的所有字符串运行utf8_encode,而不管该字符串是否需要任何utf8更正,该怎么办

utf8_编码是一个轻量级函数吗?如果我通过utf8\U编码运行数百个字符串,会对性能产生重大影响吗?就像我使用json输出的模板引擎一样

寻找一些可靠的建议和反馈

问候

--更新--

所以我注入了一个数组遍历递归函数来遍历所有对象,并对所有对象进行utf8_编码

$response是一个多维数组,包含大约1000个节点:

$response['stat']="ok";
$response['contacts'][0]['name']="Brad";
$response['contacts'][0]['email']="Brad@domain.com";
$response['contacts'][0]['number']="1800-55850";
$response['contacts'][1]['name']="Johj";
$response['contacts'][1]['email']="Johj@domain.com";
$response['contacts'][1]['number']="1800-7777";
……等等

我的脚本时间结果如下:

不带utf8_编码锤击 -第一次运行:0.86414098739624

第二轮:0.86342883110046

第三次运行:0.88974404335022

wtih utf8_编码锤击 -第一次运行:0.9133028940698

第二轮:0.90936899185181

第三次运行:0.89101815223694


大约100毫秒的交易..hmmm

“包含非标准utf8字符串状重音字符的值”-unicode当然包含任何“重音字符”,UTF-8能够很好地表示它们。如果出现任何问题,那么您首先没有UTF-8中的输入数据–您应该调查原因并加以解决,而不是寻找粗糙的解决方法。如果您认为我的问题在输入阶段,同样的问题仍然适用,我正在尝试一个全面的解决方案,以确保传入json_encode的所有输入/字符串都不会被删除。例如,在我当前的例子中,php加载一个包含联系人列表的纯文本文件,我想按原样将其插入DB以保留原始数据。。同时,我想通过json_encode.输出字符串。除了包含charñ和其他非utf8字符的名称外,它工作得很好。在不知道它使用什么字符编码的情况下将数据插入数据库首先没有多大意义。因此,你应该研究如何检测未知的输入字符编码,并在必要时将其转换为你正在使用的编码。这是另一种看待它的方式,但目前我的应用程序运行良好,在标准的卫生程序之后,我想再次按原样插入数据,以尽可能保留原始的输入,而不影响数据库的安全性。我的表使用标准的latin1,它能够像预期的那样正确地存储字符串,直接在mysql中验证。现在,我知道你说的是什么,但我相信我的问题集中在json_编码部分,确保我根据之前的情况传递正确的字符串。