6

キリル文字フォントで、部分文字列が一部の文字を「?」に置き換える理由がよくわかりません。

私のコード

$string1 = get_the_content();
$string = strip_tags($string1);
$stringcutted = substr($string,0,150);
$replacement = "...";
$final = substr($stringcutted, 0, -3).$replacement;

そしてそれがhtmlでどのようにレンダリングされるかを見てください

奇妙なicon1 奇妙なicon2

解決策はありますか?

4

3 に答える 3

3

PHPの文字列関数はバイトの文字列に基づいているためです。彼らは文字エンコードの知識を持っていません。したがって、UTF-8のように、文字が1バイト以上を占める可能性がある場合、期待どおりに機能しません。

<?php 
 $x = 'Подмосковные вечера';
 print(strlen($x)."\n");        # 37, not 19
 print(substr($x,0,1)."\n");    # �, not П
 print(substr($x,0,2)."\n");    # П, not По
?>

非ASCIIテキストを操作する場合は、マルチバイト文字列関数を確認してください。

于 2012-05-23T00:57:21.503 に答える
0

文字エンコードをチェックアウトする必要があります。基本的に、ある形式でエンコードされた文字列があり、それを別の形式で出力しています。

国際的なもの(そしてあなたがそうしているように見える)の場合、UTF-8を使用します:-HTMLファイルで頭に追加します(上部近く)-PHPでは、すべての文字列を次のように処理していることを確認しますUTF-8-データベースもある場合は、データベース、テーブル、およびフィールドがすべてUTF-8として構成されていることを確認してください(警告:この変更を行うと、インポート/エクスポートせずに既存のデータが破損する可能性があります!)。-特殊文字を含むテンプレートファイルを読み取る場合は、それらがUTF-8であることも確認してください。(特殊文字がない場合は、通常のAscIIで十分です)

それが簡単な答えです。文字エンコードについて読むべきことがたくさんあります-ただグーグルそれ。

(代替ソリューション、ASCIIを使用しますが、すべてをWeb対応の文字コードに変換します。ただし、特にユーザー入力を処理する場合は、すべてのコードを正しく取得するのは難しいです。)

于 2012-05-23T00:50:00.497 に答える
0

文字セットを手動で定義する必要があります。mb_substr()を使用します。それは役立つはずです。 http://php.net/manual/en/function.mb-substr.php

于 2013-04-19T11:52:26.383 に答える