例如。输入:
Riferimento-a-€-9-90
输出:
Riferimento-a-%E2%82%AC-9-90
请提前帮助,谢谢。
答案 0 :(得分:3)
要将ISO-8859-1字符串转换为三元组/百分比编码,请使用rawurlencode
:
$encoded = rawurlencode($str);
但是,您粘贴到问题中的字符串不是ISO-8859-1编码的,如果它包含BPH
(此处允许中断)控制字符,它是一个不可打印的字符。与三元组/十六进制编码的字符串一样,以下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编码。
这可能是你正在寻找的。 p>
松散相关:How to substitute non SGML characters in String using PHP?
你在评论中另外提到:
如何将
è
转换为%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
部分:< / p>
â %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
是common in HTML documents。
正如您所写,您从数据库中收到数据,我假设phpmyadmin将您在数据库中获得的UTF-8文本显示为Windows-1252:
MySQL : UTF-8: \xE2\x82\xAC (€)
PHPMyAdmin : Windows-1252: \xE2\x82\xAC (€)
如果您现在从数据库中获取UTF-8编码数据,则只需在其上运行rawurlencode
即可获得您要求的六进制编码。