Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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 以字符串形式对ISO-8859-1字符(ASCII之外)进行十六进制编码?_Php_String_Hex_Iso 8859 1 - Fatal编程技术网

Php 以字符串形式对ISO-8859-1字符(ASCII之外)进行十六进制编码?

Php 以字符串形式对ISO-8859-1字符(ASCII之外)进行十六进制编码?,php,string,hex,iso-8859-1,Php,String,Hex,Iso 8859 1,例如,输入: Riferimento-a-€-9-90 里弗里门托-a-9-90 输出: Riferimento-a-%E2%82%AC-9-90 里弗里门托-a-%E2%82%AC-9-90 请提供帮助,提前感谢。要将ISO-8859-1字符串转换为三元组/百分比编码,请使用: 但是,如果粘贴到问题中的字符串包含不可打印的BPH(此处允许中断)控制字符,则该字符串不是ISO-8859-1编码的。与三元组/十六进制编码字符串一样,以下PHP表示法也是二进制安全的: $str = "Rifer

例如,输入:

Riferimento-a-€-9-90 里弗里门托-a-9-90 输出:

Riferimento-a-%E2%82%AC-9-90 里弗里门托-a-%E2%82%AC-9-90
请提供帮助,提前感谢。

要将ISO-8859-1字符串转换为三元组/百分比编码,请使用:

但是,如果粘贴到问题中的字符串包含不可打印的
BPH
(此处允许中断)控制字符,则该字符串不是ISO-8859-1编码的。与三元组/十六进制编码字符串一样,以下PHP表示法也是二进制安全的:

$str = "Riferimento-a-\xE2\x82\xAC-9-90";
将其作为UTF-8编码字符串,结果如下:

Riferimento-a-€-9-90
%E2%82%AC
是欧元符号(U+20AC)的URL编码UTF-8编码

这可能就是你要找的

松散相关:


您在评论中另外询问:

如何转换
è
%hex

因为没有
è
è
)涉及到,我想你不太清楚你在这里问了什么。但我先从你的问题开始,因为它最简单。这是一个分两步的过程:

首先将命名的HTML实体转换为目标字符编码中的标准字符:

$entity = 'è';
$iso_8859_1 = html_entity_decode($entity, NULL, 'ISO-8859-1');
然后将其转换为´%hex`编码,这通常称为urlencoding:

$entity = 'è';
$iso_8859_1 = html_entity_decode($entity, NULL, 'ISO-8859-1');
$hex = rawurlencode($iso_8859_1);
基本上就是这样。如果尝试转换目标编码中不存在的实体,则不会转换该实体,因此无论字符编码如何,都会保留信息

然而,我认为这只是对您的信息,因为除了运行这些转换之外,您还有其他一些问题

在phpmyadmin中,它显示为
“Riferimento-a-α-9-90”
,我想将其转换为
“Riferimento-a-%E2%82%AC-9-90”

您没有分享显示的内容实际上是如何以文本形式表示的,但因为您询问了命名HTML实体(例如
è;
),我假设您关心
部分的
,/%E2%82%A
部分:

â    %E2    Windows-1252    LATIN SMALL LETTER A WITH CIRCUMFLEX (U+00E2)
‚    %82    Windows-1252    SINGLE LOW-9 QUOTATION MARK (U+201A)
¬    %AC    Windows-1252    NOT SIGN (U+00AC)
您收到的有关ISO-8859-1中这些字符的信息是错误的,因为在ISO-8859-1
,/%82
中不存在,在该位置有一些C1集控制代码。所以我假设它是Windows-1252

在您编写从数据库接收数据的过程中,我假设phpmyadmin将数据库中的UTF-8文本显示为Windows-1252:

MySQL      : UTF-8:         \xE2\x82\xAC (€)    
PHPMyAdmin : Windows-1252:  \xE2\x82\xAC (€)

如果您现在从数据库中获取UTF-8编码数据,则只需在其上运行
rawurlencode
,即可获得所需的十六进制编码。

您的问题是什么?帮什么忙?输入还是输出?解释一下这里发生了什么?使用是否安全?请添加您的代码。输入字符串看起来不像ISO-8859-1。非常感谢。如果我使用rawurlencode转换“Riferimento-a-9-90”,我得到的是“Riferimento-a-%C3%A2%E2%80%9A%C2%AC-9-90”,而不是我想要的“Riferimento-a-%E2%82%AC-9-90”,您能告诉我如何获得正确的字符吗?我是亚洲人,不熟悉欧洲字符处理,抱歉我的无知。以及如何转换è;到%hex模式?它们的任何内置函数都可以做到这一点,或者我必须构建一个映射数组来转换它们所有这些字符串来自mysql数据库,使用phpmyadmin,它显示为“Riferimento-a-9-90”,我想将其转换为“Riferimento-a-%E2%82%AC-9-90”。