例如。输入:
Riferimento-a-‚¬-9-90
输出:
Riferimento-a-%E2%82%AC-9-90
请帮助,在此先感谢。
要将 ISO-8859-1 字符串转换为三元组/百分比编码,请使用rawurlencode
:
$encoded = rawurlencode($str);
但是,您粘贴到问题中的字符串不是 ISO-8859-1 编码的,如果它包含BPH
(Break Permitted Here) 控制字符,它是一个不可打印的字符。与三元组/十六进制编码字符串一样,以下 PHP 表示法也是二进制安全的:
$str = "Riferimento-a-\xE2\x82\xAC-9-90";
将其作为 UTF-8 编码的字符串,结果如下:
Riferimento-a-€-9-90
%E2%82%AC
是 EURO SIGN (U+20AC) 的 urlencoded UTF-8 编码。
这可能是您正在寻找的。
松散相关:如何使用 PHP 替换字符串中的非 SGML 字符?
您在评论中还问:
如何转换
è
为%hex
?
由于没有è
( è
) 涉及,我想你并不是很清楚你在这里问什么。但我先从你问的开始,因为它最简单。这是一个两步过程:
您首先将命名的 HTML 实体转换为目标字符编码中的标准字符:
$entity = 'è';
$iso_8859_1 = html_entity_decode($entity, NULL, 'ISO-8859-1');
然后将其转换为 '%hex' 编码,通常称为 urlencoding:
$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 集控制代码。所以我假设它在 HTML 文档Windows-1252
中很常见。
正如您所写,您从数据库中接收数据,我假设 phpmyadmin 将您在数据库中的 UTF-8 文本显示为 Windows-1252:
MySQL : UTF-8: \xE2\x82\xAC (€)
PHPMyAdmin : Windows-1252: \xE2\x82\xAC (€)
如果您现在从数据库中获取 UTF-8 编码的数据,则只需在其上运行rawurlencode
即可获得您要求的十六进制编码。