Aktueller Standort: Startseite> Neueste Artikel> ICONV_SUBSTR Wie verhindern Sie "Zeichenkürzung" -Fehler beim Abfangen einer Zeichenfolge?

ICONV_SUBSTR Wie verhindern Sie "Zeichenkürzung" -Fehler beim Abfangen einer Zeichenfolge?

M66 2025-07-25

3. Ursachen für "Zeichenkürzung" -Fehler

  • : Die Standardcodierung ist möglicherweise nicht die tatsächliche Codierung Ihrer Zeichenfolge, was zu einem Fehler beim Abfangen der Anzahl der Bytes führt.

  • Die Abfanglänge überschreitet die tatsächliche Anzahl von Zeichen : Ein Fehler kann angegeben werden, wenn die Abfangposition die Länge der Zeichenfolge überschreitet.

  • Die Zeichenfolge selbst ist inkonsistent oder beschädigt .


4. Wie kann man Fehler "Charakterkürzung" verhindern?

  1. Identifizieren Sie die Codierung

 <span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-string">'UTF-8'</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span></span>
  1. Stellen Sie sicher, dass die abgefangene Länge und der Offset auf Zeichen basieren, nicht auf Bytes

ICONV_SUBSTR 'S $ Offset und $ Länge sind Zeichenzahlen, keine Bytes, aber die Zeichenfolge muss die angegebene Codierung sein.

  1. Die Stringlänge im Voraus erkennen

Verwenden Sie iConv_strlen , um die Länge der Zeichenfolge zu bestimmen, um grenzüberschreitend zu vermeiden:

 <span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_strlen</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$offset</span></span><span> &gt; </span><span><span class="hljs-variable">$length</span></span><span>) {
    </span><span><span class="hljs-comment">// Behandeln von Offsets und Cross Grenzen</span></span><span>
}
</span></span>
  1. Fehlerbehandlung

Wenn in iconv_substr ein Fehler auftritt, kann er False zurückgeben. Ein gutes Urteilsvermögen machen:

 <span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-comment">// Verarbeitungsabfangen fehlgeschlagen,Vermeiden Sie Programmausnahmen</span></span><span>
}
</span></span>
  1. Verwenden Sie die Mbstring -Funktion als Alternative

MB_SUBSTR ist auch eine Multi-Byte-Safe-String-Intercept-Funktion, die häufig zum Ersetzen von iConv_substr verwendet wird:

 <span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span></span>

V. Beispielcode

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"Dies ist eine Testzeichenfolge,Zur Demonstration iconv_substr Verwendung。"</span></span><span>;
</span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-string">'UTF-8'</span></span><span>;
</span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-number">3</span></span><span>;
</span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">5</span></span><span>;

</span><span><span class="hljs-variable">$totalLength</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_strlen</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$offset</span></span><span> &gt; </span><span><span class="hljs-variable">$totalLength</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Die Startposition des Abfangs übersteigt die Saitenlänge。"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-variable">$substr</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$substr</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"String -Abfangen fehlgeschlagen,Es kann Codierungsprobleme geben。"</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Abfangen die Ergebnisse:"</span></span><span> . </span><span><span class="hljs-variable">$substr</span></span><span>;
    }
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>