Die nützlichste verwandte Ressource, die ich gefunden habe, ist diese (ja, es ist Python, aber alle diese Funktionen sind in PHP verfügbar), was eine etwas unangenehme “Lösung” ist. Die Wurzel des Problems besteht darin, dass diese Funktionalität davon abhängt, dass das Host-Betriebssystem über die entsprechenden Gebietsschemainformationen verfügt – aber gleichzeitig sehe ich keinen Grund dafür, dass dies innerhalb dieser Einschränkungen nicht möglich ist.
– DaveRandom
16. Dezember 2012 um 1:19 Uhr
Zunächst einmal gibt es keine internationale globale Währungssymboltabelle, die jeder auf dem Planeten lesen und verstehen könnte.
In jeder Region/jedem Land sind die Währungssymbole unterschiedlich, deshalb müssen Sie sie anhand des Browsers/Benutzergebietsschemas bestimmen, je nachdem, wer liest.
Der richtige Weg ist, wie Sie vermutet haben, NumberFormatter::CURRENCY_SYMBOL zu verwenden, aber Sie müssen zuerst das entsprechende Gebietsschema wie einstellen [email protected]=JPY:
$locale="en-US"; //browser or user locale
$currency='JPY';
$fmt = new NumberFormatter( $locale."@currency=$currency", NumberFormatter::CURRENCY );
$symbol = $fmt->getSymbol(NumberFormatter::CURRENCY_SYMBOL);
header("Content-Type: text/html; charset=UTF-8;");
echo $symbol;
Auf diese Weise wird das Symbol für den Benutzer verständlich.
Zum Beispiel ist $symbol:
Kanadischer Dollar (CAD) : CA$ in den USA, CAD in Rumänien , $CA in Iran
Iranischer Rial (IRR): IRR in den USA, während im Iran sein wird ﷼
Exzellent!! +1. Ich wünschte nur, es gäbe eine Möglichkeit zum Abrufen locale nach Währung iso. Etwas wie rlocaleconv(int_curr_symbol, 'JPY') oder so!
Es ist erwähnenswert, dass dies für SF4.3 und höher veraltet ist:
/**
* Returns the bundle containing currency information.
*
* @return CurrencyBundleInterface The currency resource bundle
*
* @deprecated since Symfony 4.3, to be removed in 5.0. Use {@see Currencies} instead.
*/
public static function getCurrencyBundle(): CurrencyBundleInterface
{
Also, stattdessen können Sie Folgendes tun:
use Symfony\Component\Intl\Currencies;
echo Currencies::getSymbol('AUD');
Technisch (IMHO) beantwortet dies nicht die Frage, bei der es um PHP ging, nicht um Symfony.
– geoidetisch
15. August 2015 um 13:07 Uhr
@geoidesic Ich habe diese Frage gestellt und das Ziel ist es, das Währungssymbol in PHP zu erhalten. Die Verwendung von Bibliotheken von Drittanbietern ist erlaubt und wird empfohlen.
– umpirsky
16. August 2015 um 8:08 Uhr
Außerdem, was für eine schöne Syntax.
– Iharob Al Asimi
27. März 2017 um 19:29 Uhr
Siehe die Antwort von Federico Nicolas Motta.
– Philipp M.
12. September 2018 um 0:36 Uhr
kryptisch ツ
Da die Symbole Multi-Byte sein können, habe ich mb_* () -Funktionen verwendet, um alle Zeichen ohne Satzzeichen und Nicht-Ziffern korrekt zu erfassen, die nur das Symbol verlassen würden.
Wenn Sie das Gebietsschema mit dieser Funktion festlegen setlocale("LC_ALL", "es_AR");
Sie können verwenden localeconv()['currency_symbol'] oder localeconv()['int_curr_symbol'] um das lokale Währungssymbol und die internationale Variante des Währungssymbols abzurufen.
Sie können verwenden Symfony Intl Komponente
Installieren Sie es über den Composer mit composer require symfony/intl
Dann erhalten Sie das HTML-Symbol mit dem Folgenden
Dies ist eine schöne einfache Inline-Lösung, die keine weitere Funktion deklarieren muss, aber auch nicht alle Fälle richtig behandelt – dh Währungen, bei denen Buchstaben Teil der Ausgabe sind. Aber um zB zwischen $ und £ zu unterscheiden, funktioniert es gut.
Mc-Benutzer
Zend_Locale::getTranslationList('CurrencySymbol')
Gibt Ihnen ein assoziatives Array von 3-Buchstaben-Währungscodes zu ihrem Symbol.
Das Problem ist, dass das Währungssymbol entweder vor oder nach der Zahl erscheinen kann. Wofür verwendest du das Symbol?
–Tom B
16. Dezember 2012 um 0:44 Uhr
Machen Sie einfach eine Regex für alles, was keine Ziffer oder ein Komma ist. Etwas wie
/[^0-9,]*/
.– rmobis
16. Dezember 2012 um 0:45 Uhr
Einige der Symbole werden Multi-Byte sein, sodass eine einfache Zeichenfolgensuche nicht sehr gut funktioniert.
– kryptisches ツ
16. Dezember 2012 um 1:06 Uhr
Ich möchte Regex vermeiden. Eigentlich wollte ich reparieren github.com/symfony/symfony/blob/master/src/Symfony/Component/… und diese Regex loswerden, ich dachte, PHP unterstützt dies. Danke trotzdem.
– umpirsky
16. Dezember 2012 um 1:13 Uhr
Die nützlichste verwandte Ressource, die ich gefunden habe, ist diese (ja, es ist Python, aber alle diese Funktionen sind in PHP verfügbar), was eine etwas unangenehme “Lösung” ist. Die Wurzel des Problems besteht darin, dass diese Funktionalität davon abhängt, dass das Host-Betriebssystem über die entsprechenden Gebietsschemainformationen verfügt – aber gleichzeitig sehe ich keinen Grund dafür, dass dies innerhalb dieser Einschränkungen nicht möglich ist.
– DaveRandom
16. Dezember 2012 um 1:19 Uhr