字符串中的十六进制编码ISO-8859-1字符(ASCII之外)?

时间:2012-04-12 15:55:56

标签: php string hex iso-8859-1

例如。输入:

Riferimento-a-€-9-90

输出:

Riferimento-a-%E2%82%AC-9-90

请提前帮助,谢谢。

1 个答案:

答案 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编码。

这可能是你正在寻找的。

松散相关:How to substitute non SGML characters in String using PHP?


你在评论中另外提到:

  

如何将è转换为%hex

由于没有涉及èè),我猜你在这里问的问题并不是很清楚。但我首先要问你的问题,因为它最简单。这是一个两步过程:

render?grid=%2B--------%2B+++%2B--------%2B---------%2B+++%2B-----%2B------%2B+++%2B---%2B----%2B%0D%0A%7C+cFDA+++%7C+++%7C+Decode+++++++++++%7C+++%7C+Encode+++++%7C+++%7C+cFDA+++%7C%0D%0A%7C+Entity+%2B--%3E%2B------------------%2B--%3E%2B------------%2B--%3E%2B+Entity+%7C%0D%0A%7C+%26Name%3B+%7C+++%7Chtml_entity_decode%7C+++%7Crawurlencode%7C+++%7C+%25HEX+++%7C%0D%0A%7C+++++%7Bd%7D%7C+++%7C++cDBF++++++++++++%7C+++%7C++c1AB++++++%7C+++%7C+++++%7Bd%7D%7C%0D%0A%2B--------%2B+++%2B--------%2B---------%2B+++%2B-----%2B------%2B+++%2B--------%2B&scale=1&background=FFFFFF&E=on&timeout=10

首先将指定的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实体(例如&egrave;),我假设您特别关注€ / %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-1252common in HTML documents

正如您所写,您从数据库中收到数据,我假设phpmyadmin将您在数据库中获得的UTF-8文本显示为Windows-1252:

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

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