Warum können nicht alle Zeichen vom Zeichen mit voller Breite in Zeichen mit halber Breite geändert werden?

8

Ich möchte alle Zeichen von Zeichen mit voller Breite in Zeichen mit halber Breite ändern, schreibe die folgenden Codes, um die Aufgabe zu erledigen. Um beispielsweise alle Zeichen mit voller Breite in

zu ändern %Vor%

in Zeichen halber Breite, in

%Vor%

Es gibt zwei Methoden, um das Ziel zu erreichen, aber alle sind gescheitert.
Alle PHP-Dateien wurden als UTF-8-Format gespeichert.

Methode 1:

%Vor%

Fehlermeldung:

Methode 2:

%Vor%

}

%Vor%

Fehlermeldung:

Wie man zwei von ihnen repariert?

Ich löste das Problem der Methode 1, die festen Codes sind wie folgt.

%Vor%     
it_is_a_literature 09.04.2015, 12:46
quelle

6 Antworten

0

Methode 2:

Ich habe preg_replace in preg_replace_callback geändert und die anonyme Funktion zum Stummschalten der Warnung verwendet. Dein regulärer Ausdruck war falsch, ich habe ihn geändert. Es gibt einfache Suche in anonymer Funktion.

%Vor%     
Michas 19.04.2015, 21:35
quelle
7

Eine Codezeile:

%Vor%

und

%Vor%

wird

%Vor%

und Sie können den Fall der Buchstaben als Bonus behalten.

Hinweis: Ссылка

    
Drakes 17.04.2015 18:29
quelle
1

strstr () sucht nach dem Auftreten einer Zeichenfolge innerhalb einer anderen Zeichenfolge Zeichenfolge.

Sie rufen es mit einer Zeichenfolge und einem Array auf.

warum nicht einfach die entsprechenden Werte für die Schlüssel zurückgeben?

%Vor%

Es könnte ineffizient sein, das Array bei jedem Funktionsaufruf zu erstellen.

Vielleicht möchten Sie es in Ihrer Hauptfunktion definieren und es einfach an Ihre Funktion fulltohelf () übergeben oder sich überhaupt nicht um eine Funktion kümmern.

Wie immer in diesen Fällen werde ich hinzufügen, dass Sie mysql zugunsten von mysqli (verbessert) vermeiden sollten.

ZUSÄTZLICH

Wenn ich von einem Zeichensatz in einen anderen übersetze, würde ich die php-Funktionen verwenden, anstatt das Rad neu zu erfinden.

Siehe mb_convert_encoding und unterstützte Kodierungen

Ich kann nicht sicher sein, welche Codierungen Sie verwenden, aber etwas wie das Folgende könnte den Trick machen:

%Vor%     
Loopo 09.04.2015 13:04
quelle
1

Eine einfache Lösung wäre die Verwendung von str_replace() mit Arrays von Strings, die effektiv eine Multibyte-Ersetzung bewirken. Zum Beispiel:

%Vor%

Eine wahrscheinlich robustere Lösung wäre mb_convert_kana() , also:

%Vor%

Beide Lösungen geben folgendes aus:

%Vor%     
MM. 13.04.2015 10:52
quelle
1

Anstatt preg_replace zu verwenden, denke ich, dass es in diesem Fall besser ist, str_replace . Wir suchen eine Zeichenfolge nach den Schlüsseln des Warteschlangenarrays und ersetzen sie durch ihre entsprechenden Werte. Dies ist auch eine sehr lesbare und einfache Lösung.

%Vor%

Beachten Sie, dass ich die Seite im UTF-8-Modus hatte, indem Sie Folgendes deklarieren:

%Vor%

Hier ist mein Test:

%Vor%

Hier sind meine Ergebnisse:

  

Codebit.cn - 聚合 小段 精华 代码
  Codebit.cn - 聚合 小段 精华 代码

    
Mari M 14.04.2015 18:55
quelle
0

Ich repariere einfach deinen Fehler.

%Vor%

Erstens, Ihr Code verwendet foreach, und ich habe für ($ i = ...) geändert, weil String keine foreach-Syntax unterstützt (iterierend). Zweitens ist Ihr if / else-Ausdruck nicht mit Logik kompatibel.

%Vor%

und das habe ich behoben,

%Vor%

Sie können auch eine andere Methode verwenden

jeder sagt, mb_convert_kana (). Ja, das ist eine großartige Lösung.

    
TaeL 20.04.2015 06:23
quelle

Tags und Links