ホーム>source

投稿のコンテンツからURLとタイトルを取得していますが、タイトルがUTF-8ではなく、結果をエコーするときに「Â」などのファンキーな文字が含まれているようです。正しい文字セットが使用されない理由は何ですか?私のヘッダーは正しいメタデータを使用しています。

私はここでいくつかの解決策を試しましたが、どれもうまくいかないようですので、何か不足している場合に備えて、以下にコードを追加すると思いました。

$servername = "localhost";
$database = "xxxx";
$username = "xxxxx";
$password = "xxxx";
$conn = mysqli_connect($servername, $username, $password, $database);

$post_id = 228;
$content_post = get_post($post_id);
$content = $content_post->post_content;
$doc = new DOMDocument();
$doc->loadHTML('<?xml encoding="utf-8" ?>' . $content);
$links = $doc->getElementsByTagName('a');

$counter = 0;
foreach ($links as $link){
$href = $link->getAttribute('href');
$avoid  = array('.jpg', '.png', '.gif', '.jpeg');
if ($href == str_replace($avoid, '', $href)) {
$title = $link->nodeValue;
$title = html_entity_decode($title, ENT_NOQUOTES, 'UTF-8');

$sql = "INSERT INTO wp_urls_download (title, url) VALUES ('$title', '$href')";
if (mysqli_query($conn, $sql)) {
$counter++;
echo "Entry" . $counter . ": $title" . "<br>";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
}
}

エコー文字列の更新-コードを最初にアップロードした後にこれを変更しました。私はすでに他の投稿で解決策を試しましたが、成功しませんでした。

あなたの答え
  • 解決した方法 # 1

    「二重エンコード」があるようです。あなたが期待したのは

    Transverse Abdominis (TVA)
    
    

    しかし、括弧の前のスペースにあるのは、おそらくMicrosoft Wordに由来する特別なスペースであり、utf8に2回変換されました。 16進数: A0  ->  c2a0  ->  c382c2a0

    はい、「utf8 all through through」へのリンクは最終的に修正を提供しますが、もっと助けが必要だと思います。

    ザ・ウィズウィズ  latin1からutf8に変換され、それらのバイトをlatin1であるかのように扱い、変換を繰り返します。

    接続は A0 を介してクライアントのエンコードを提供します  (または類似)。

    その後、テーブルの列は mysqli_obj->set_charset('utf8') になります  (またはutf8)。 CHARACTER SET utf8mb4 で検証する 。 (現在はおそらくlatin1です。)

    HTMLは SHOW CREATE TABLE で始まる必要があります 。

    UTF-8文字に関する問題。私が見るものは私が保存したものではありません

  • 解決した方法 # 2

    接続でutf8文字セットを設定しようとしましたか?

    <meta charset=UTF-8>

    詳細については、http://php.net/manual/en/mysqli.set-charset.php

    $conn->set_charset('utf8');

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ excel - SelectionChangeプロシージャをトリガーした前の行番号を知るにはどうすればよいですか?