Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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 更好地解释mb_encode_numericentity()中的$convmap_Php_Collation_Html Entities_Html Encode - Fatal编程技术网

Php 更好地解释mb_encode_numericentity()中的$convmap

Php 更好地解释mb_encode_numericentity()中的$convmap,php,collation,html-entities,html-encode,Php,Collation,Html Entities,Html Encode,对于中的方法mb\u encode\u numericentity,对该参数convmap的描述对我来说很模糊。有人能帮我更好地解释这个问题吗?或者,如果这对我来说足够的话,也许可以“让它安静下来”?此参数中使用的数组元素的含义是什么?手册页中的示例1 <?php $convmap = array ( int start_code1, int end_code1, int offset1, int mask1, int start_code2, int end_code2, int o

对于中的方法
mb\u encode\u numericentity
,对该参数
convmap
的描述对我来说很模糊。有人能帮我更好地解释这个问题吗?或者,如果这对我来说足够的话,也许可以“让它安静下来”?此参数中使用的数组元素的含义是什么?手册页中的示例1

<?php
$convmap = array (
 int start_code1, int end_code1, int offset1, int mask1,
 int start_code2, int end_code2, int offset2, int mask2,
 ........
 int start_codeN, int end_codeN, int offsetN, int maskN );
// Specify Unicode value for start_codeN and end_codeN
// Add offsetN to value and take bit-wise 'AND' with maskN, then
// it converts value to numeric string reference.
?>

这很有帮助,但是我看到了很多用法示例,比如
array(0x80,0xffff,0,0xffff)0
,掩码将是
0xffff
,如果是,偏移量是否意味着字符串中要开始转换的字符数,以及
mask
在这种上下文中的含义是什么?

向下看,看起来这些字符是准确的,尽管有些神秘

convmap
的四个主要部分似乎是:

start\u code
:地图影响从此字符代码开始的项目。
end\u code
:映射将影响此字符代码之前的项目。
offset
:为此字符代码添加特定的偏移量(正数或负数)。
mask
:用于掩码操作的值(字符代码按位和掩码值)

字符代码可以通过字符表可视化,例如用于
ISO-8859-1
编码。(
ISO-8859-1
是原始PHP文档中使用的编码。)查看此编码表,我们可以看到
convmap
仅用于影响从
0x80
开始的字符代码项(对于此特定编码,它似乎为空)此编码中的最后一个字符
0xff
(看起来是
ÿ

为了更好地理解
convmap
偏移量掩码功能,以下是偏移量和掩码如何影响字符代码的一些示例(在下面的示例中,我们的
字符代码
的定义值为
162
):

简单的例子:
偏移示例: 笔记:
offset
似乎允许对要转换的项目的当前
start\u code
end\u code
部分进行更精细的控制。例如,您可能有特定的原因需要为
convmap
中的某一行字符代码添加偏移量,但随后可能需要忽略
convmap
中另一行的偏移量


掩码示例: 笔记: 这个答案并不打算涵盖,但掩蔽可以从给定的值中得到帮助

掩码示例1 因此,在第一个掩码示例中,
0xf0
f
表示我们希望将值保留在二进制值的左侧。这里,
f
的二进制值为
1111
0
的二进制值为
0000
——一起成为
11110000
的值

然后,当我们使用
字符代码
(在本例中为
162
,其二进制值为
10100010
)执行按位AND操作时,按位操作如下所示:

  11110000
& 10100010
----------
  10100000
当转换回其十进制值时,
10100000
160

因此,我们有效地保留了原始
字符代码
值中位的“左侧”,并去掉了位的“右侧”

掩码示例2 在第二个掩码示例中,按位AND操作中的掩码
0x0f
(其二进制值为
00001111
)将具有以下二进制结果:

  00001111
& 10100010
----------
  00000010
当转换回十进制值时,它是
2

因此,我们有效地保留了原始
字符代码
值中位的“右侧”,并去掉了位的“左侧”

遮罩示例3 最后,第三个掩码示例显示了在按位AND操作中使用
0x00
(二进制形式为
00000000
)掩码时发生的情况:

  00000000
& 10100010
----------
  00000000

这导致了
0

乍一看,这两个页面和该页面上似乎显示了相同的格式(但显示为单行或多行),这意味着
偏移量
将为
0
掩码
将为
0xffff
。这些示例中的
$convmap
似乎表明,您可以根据需要包含任意多的“行”(“四个值的集合”)。@summea感谢summea。在此上下文中,
mask
的确切含义是什么?我更新了我的问题。在
convmap
中使用
offset
mask
值可能有更具体的原因,但我希望下面的答案能有所帮助!你太棒了。非常感谢:)@NickRolando哦,不是我!但我很高兴这有帮助!
original:  ¢
converted: &#163;
<?php
// Mask Example 1
$original_str = "¢";
$convmap = array(0x00, 0xff, 0, 0xf0);
$converted_str = mb_encode_numericentity($original_str, $convmap, "UTF-8");
echo "original:  $original_str\n";
echo "converted: $converted_str\n\n";

// Mask Example 2
$convmap = array(0x00, 0xff, 0, 0x0f);
$converted_str = mb_encode_numericentity($original_str, $convmap, "UTF-8");
echo "original:  $original_str\n";
echo "converted: $converted_str\n\n";

// Mask Example 3
$convmap = array(0x00, 0xff, 0, 0x00);
$converted_str = mb_encode_numericentity($original_str, $convmap, "UTF-8");
echo "original:  $original_str\n";
echo "converted: $converted_str\n";
?>
original:  ¢
converted: &#160;

original:  ¢
converted: &#2;

original:  ¢
converted: &#0;
  11110000
& 10100010
----------
  10100000
  00001111
& 10100010
----------
  00000010
  00000000
& 10100010
----------
  00000000