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'替换UTF-16编码字符串中的低位ASCII字符;s str_替换函数_Php_Character Encoding_Str Replace_Utf 16_Well Formed - Fatal编程技术网

使用PHP'替换UTF-16编码字符串中的低位ASCII字符;s str_替换函数

使用PHP'替换UTF-16编码字符串中的低位ASCII字符;s str_替换函数,php,character-encoding,str-replace,utf-16,well-formed,Php,Character Encoding,Str Replace,Utf 16,Well Formed,我有一些用于文本过滤的PHP代码。在筛选过程中,一些ASCII字符(如与号(&)和波浪号(~)会临时转换为低位ASCII字符(如十进制代码点4和5)。在生成最终过滤输出之前,转换被还原 $temp = str_replace(array('&', '~'), array("\x04", "\x05"), $input); ... some filtering code to work with $temp ... $out = str_replace(array("\x04", "\x0

我有一些用于文本过滤的PHP代码。在筛选过程中,一些ASCII字符(如与号(&)和波浪号(~)会临时转换为低位ASCII字符(如十进制代码点4和5)。在生成最终过滤输出之前,转换被还原

$temp = str_replace(array('&', '~'), array("\x04", "\x05"), $input);
... some filtering code to work with $temp ...
$out = str_replace(array("\x04", "\x05"), array('&', '~'), $temp);
这适用于使用8位代码单元(如UTF-8和ISO 8859-1)的字符编码的输入文本。但我不确定输入是否以更大的代码单位编码,如UTF-16或UTF-32。第一个转换步骤会破坏输入文本的良好格式吗?由于输入的某些预先存在的字符,在恢复步骤中是否会有一些冲突?PHP安装程序不支持多字节字符串函数


有人能评论吗?谢谢。

str\u replace工作正常,只要传递给它的所有字符串都采用相同的编码。它只是对数据进行二进制比较/替换,因此实际编码并不重要


这就是为什么没有mb_str_replace in.

中的“所有字符串”是否意味着我提供的示例代码最后一行中的“&”和“~”应该是UTF-16编码的,如果输入文本是UTF-16?也就是说,PHP代码本身(PHP文件)应该是UTF-16吗?最好是这样。否则,&可能会意外地匹配输入字符串中UTF-16字符的一部分。不过我还是建议不要使用UTF-16。UTF-8是事实上的在线标准,UTF-16几乎没有优势。UTF-8适用于尺寸,UTF-32适用于简单性,而UTF-16在大多数情况下两者都不适用。Hmmm。输入文本的编码不在我的控制范围内(我希望避免将其转换为UTF-8)。谢谢。
*我不想把它转换成UTF-8*
为什么?您还必须以给定的编码进行输出,对吗?我认为最好的工作方式是对所有数据使用单一编码(最好是UTF-8)。混合编码是自找麻烦。在“过去”中,混合ANSI代码页是一个麻烦(对许多人来说仍然是),但现在,混合Unicode编码带来了全新的混乱。请注意,UTF-16还引入了Windows和Linux之间的endianness问题。这是只使用UTF-8的另一个原因。