【发布时间】:2012-04-25 00:24:55
【问题描述】:
例如。输入:
Riferimento-a-‚¬-9-90
输出:
Riferimento-a-%E2%82%AC-9-90
请帮忙,在此先感谢。
【问题讨论】:
-
你的问题是什么?帮忙做什么?输入还是输出?解释这里发生了什么?如果使用安全吗?请添加您的代码。输入字符串看起来不像 ISO-8859-1。
标签: php string hex iso-8859-1
例如。输入:
Riferimento-a-‚¬-9-90
输出:
Riferimento-a-%E2%82%AC-9-90
请帮忙,在此先感谢。
【问题讨论】:
标签: php string hex iso-8859-1
要将 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?
您在 cmets 中另外询问:
如何将
è转换为%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 集控制代码。所以我假设它是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 即可获得您要求的十六进制编码。
【讨论】: