Php 以字符串形式对ISO-8859-1字符(ASCII之外)进行十六进制编码?
例如,输入: Riferimento-a-€-9-90 里弗里门托-a-9-90 输出: Riferimento-a-%E2%82%AC-9-90 里弗里门托-a-%E2%82%AC-9-90Php 以字符串形式对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
请提供帮助,提前感谢。要将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”。