PHP查询不使用UTF-8字符集

时间:2018-08-20 11:14:34

标签: php mysql character-encoding

我从帖子的内容中获取我的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);
}

}

}

更新后的Echo字符串-我最初上传代码后对此进行了更改。我已经在其他帖子中尝试过解决方案,但没有成功。

2 个答案:

答案 0 :(得分:1)

您是否尝试在连接上设置utf8字符集?

$conn->set_charset('utf8');

有关更多信息:http://php.net/manual/en/mysqli.set-charset.php

答案 1 :(得分:1)

似乎您具有“双重编码”。您所期望的是

Transverse Abdominis (TVA)

但是,括号前的空间是一个特殊的空间,该空间可能来自Microsoft Word,然后两次转换为utf8。以十六进制表示:A0-> c2a0-> c382c2a0

是的,到“ utf8一直到”的链接最终将提供此修复程序,但我认为您需要更多帮助。

A0从latin1转换为utf8,然后将这些字节视为latin1,然后重复转换。

该连接通过mysqli_obj->set_charset('utf8')(或类似名称)提供客户端的编码。

然后,表中的列应为CHARACTER SET utf8mb4(或utf8)。使用SHOW CREATE TABLE进行验证。 (当前可能是latin1。)

HTML应该以{{1​​}}开头。

Trouble with UTF-8 characters; what I see is not what I stored