: 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 .
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>
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.
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> > </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>
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>
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>
<span><span><span class="hljs-meta"><?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> > </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">?></span></span><span>
</span></span>