2012-04-12 11 views

Antwort

2

die ISO-8859-1-String zu konvertieren, Triplett/Prozentsatz Codierung rawurlencode verwenden:

$encoded = rawurlencode($str); 

die Zeichenfolge, die Sie in die Frage jedoch eingefügt haben, ist nicht ISO-8859-1 codiert, wenn es würde das Steuerzeichen BPH (Break Permitted Here) enthalten, das ein nicht druckbares Zeichen ist. Wie das Triplett/hex-codierter String, der folgende PHP Notation ist binärsicher auch:

$str = "Riferimento-a-\xE2\x82\xAC-9-90"; 

nehmen, die als ein UTF-8-String codiert werden, führt zu der folgenden:

Riferimento-a-€-9-90 

%E2%82%AC ist die urlcodierte UTF-8-Codierung von EURO SIGN (U + 20AC).

Welches ist wahrscheinlich, was Sie suchen.

losen verwandt: How to substitute non SGML characters in String using PHP?


Sie gefragt zusätzlich in den Kommentaren:

Wie è-%hex konvertieren?

Da es keine è (è) beteiligt, ich denke, Sie sind nicht wirklich klar, was Sie hier fragen. Aber ich beginne mit dem, was Sie zuerst fragen, weil es am einfachsten ist. Es ist ein zweistufiger Prozess:

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

Sie zuerst den Namen HTML-Entität in ein Standard-Zeichen in Ihrer Zielzeichencodierung konvertieren:

$entity = 'è'; 
$iso_8859_1 = html_entity_decode($entity, NULL, 'ISO-8859-1'); 

Dann Sie es auf das '% hex` konvertieren Kodierung, die häufiger Urlencodierung genannt wird:

Und das ist es im Grunde. Wenn Sie versuchen, eine Entität zu konvertieren, die in der Zielcodierung nicht vorhanden ist, wird sie nicht konvertiert, sodass die Informationen unabhängig von der Zeichencodierung beibehalten werden.

Ich nehme jedoch an, dass das nur für Sie informativ ist, weil Sie andere Probleme haben, als nur diese Konvertierungen auszuführen.

phpMyAdmin, als "Riferimento-a-€-9-90" anzuzeigen, will ich es Sie haben nicht mit anderen geteilt zu "Riferimento-a-%E2%82%AC-9-90"

konvertieren, wie das, was tatsächlich angezeigt wird, ist textlich dargestellt, sondern weil Sie benannte HTML-Entitäten gefragt (zB è) ich nehme an, Sie über die €/%E2%82%A Teil betroffen sind speziell:

â %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) 

die Informationen, die Sie über ISO-8859-1 für thos gegeben habe e Zeichen ist falsch, weil in ISO-8859-1 ‚/%82 nicht existiert, an dieser Stelle ist einige C1 Steuercode gesetzt. Also nehme ich an, dass es ist, was common in HTML documents ist.

Wie Sie schrieb, dass Sie Ihre Daten aus der Datenbank empfangen, gehe ich davon aus, dass phpMyAdmin zeigt die UTF-8-Text, den Sie in Ihrer Datenbank als Windows 1252 haben:

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

Wenn Sie nun UTF erhalten -8 kodierte Daten aus Ihrer Datenbank, Sie müssen nur rawurlencode darauf ausführen, um die Hexencodierung zu erhalten, nach der Sie fragen.

+0

Vielen Dank. Wenn ich Rawurlencode verwende, um "Riferimento-a-€ -9-90" zu konvertieren, bekomme ich "Riferimento-a% C3% A2% E2% 80% 9A% C2% AC-9-90", nicht "Riferimento -a% E2% 82% AC-9-90 ", was ich wollte, könntest du mir sagen, wie man die richtigen Charaktere bekommt? Ich bin Asiate, nicht vertraut mit der Handhabung von europäischen Charakteren, Entschuldigung für meine Ignoranz. – frankwang

+0

und wie man & Egrave konvertiert; in% Hex-Modus? ist ihre beliebige eingebaute Funktion kann dies tun, oder ich muss ein Mapping-Array erstellen, um sie alle – frankwang

+0

diese Zeichenfolge stammt aus MySQL-Datenbank, mit phpmyadmin, es wird als "Riferimento-a-€ -9-90" Ich möchte es in "Riferimento-a% E2% 82% AC-9-90" konvertieren. – frankwang

Verwandte Themen