2016-05-12 13 views
1

Ich habe die folgende Zeichenfolge:Wie konvertiere ich Unicode-Sonderzeichen in HTML-Entities?

$string = "★ This is some text ★"; 

Ich möchte es konvertieren Einheiten html:

htmlentities("★ This is some text ★", "UTF-8"); 

Aber htmlentities kann nicht:

$string = "★ This is some text ★"; 

Die Lösung jeder über schreibt Konvertiere alle Unicodes in HTML-Entities. Also es gibt mir nur die gleiche Leistung wie der Eingang:

★ This is some text ★ 

Ich habe auch mit den beiden diese Lösung zu kombinieren versucht:

header('Content-Type: text/plain; charset=utf-8'); 

und:

mb_convert_encoding(); 

Aber diese entweder druckt und leeres Ergebnis, konvertiert überhaupt nicht oder konvertiert die Sterne falsch in:

 

Wie konvertiere ich ★ und alle anderen Unicode-Zeichen in die richtige HTML-Entität?

+0

http: // php.net/manual/en/function.htm lentities.php # 107985 – iainn

Antwort

4

htmlentities wird in diesem Fall nicht funktionieren, aber Sie können die Zeichenfolge, so etwas wie zu UCS-4 kodieren versuchen:

$string = "★ This is some text ★"; 
$entity = preg_replace_callback('/[\x{80}-\x{10FFFF}]/u', function ($m) { 
    $char = current($m); 
    $utf = iconv('UTF-8', 'UCS-4', $char); 
    return sprintf("&#x%s;", ltrim(strtoupper(bin2hex($utf)), "0")); 
}, $string); 
echo $entity; 

★ This is some text ★ 

Ideone Demo