PHP 简单 HTML DOM 解析器的字符编码问题

2023-12-21

我正在使用 PHP 简单 HTML DOM 解析器http://simplehtmldom.sourceforge.net/从其他域获取页面标题、元描述和元标签等数据,然后将其插入数据库。

但我在编码方面遇到了一些问题。问题是我没有从那些非英语网站获得正确的字符。

下面是代码:

<?php
require 'init.php';

$curl = new curl();
$html = new simple_html_dom();

$page = $_GET['page'];

$curl_output = $curl->getPage($page);

$html->load($curl_output['content']);
$meta_title = $html->find('title', 0)->innertext;

print $meta_title . "<hr />";

// print $html->plaintext . "<hr />";
?>

输出为facebook.compage

Welcome to Facebook — Log in, sign up or learn more

输出为amazon.cnpage

亚马逊-网上购物商城:è¦ç½‘è´­, å°±æ¥Z.cn!

输出为mail.rupage

Mail.Ru: почта, поиÑк в интернете, новоÑти, игры, развлечениÑ

因此,字符没有被正确编码。

任何人都可以帮助我如何解决这个问题,以便我可以将正确的数据添加到我的数据库中。


@deceze 和 @Shakti 感谢您的帮助。

+1 为 deceze 发布的文章链接(在 Web 应用程序中从前到后处理 Unicode http://kunststube.net/frontback/)也值得一读了解编码 http://kunststube.net/encoding

在阅读了您的评论、回答,当然还有这两篇文章之后,我终于解决了我的问题。

我列出了迄今为止为解决此问题所做的步骤:

  1. Added header('Content-Type: text/html; charset=utf-8');在我的 init.php 文件的顶部,
  2. 将我的数据库表字段的字符集更改为 UTF-8,
  3. 将 MySQL 连接字符集设置为 UTF-8mysql_set_charset('utf8', $connection_link_id);
  4. 使用 htmlentities() 函数转换字符$meta_title = htmlentities(trim($meta_title_raw), ENT_QUOTES, 'UTF-8');

现在问题似乎已经解决了,但我仍然需要做以下事情来完全解决这个问题。

  1. 从源获取编码字符集$source_charset.
  2. 如果字符串的编码已经不同,请将其更改为 UTF-8。为此,唯一可用的 PHP 函数是iconv()。例子:iconv($source_charset, "UTF-8", $meta_title_raw);

为了得到$source_charset我可能必须使用一些技巧或多重检查。就像检查标题和元标记等。我在以下位置找到了一个很好的答案检测编码 https://stackoverflow.com/questions/910793/detect-encoding-and-make-everything-utf-8

如果我的上述步骤有任何改进或任何错误,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 简单 HTML DOM 解析器的字符编码问题 的相关文章

  • SWIG 生成的代码无法在 PHP 5.3.2 上运行未定义的符号:zend_error_noreturn

    我有一个库 在 PHP 5 1 6 生成的一些包装器代码的帮助下 我已经成功地使用了它SWIG http www swig org v1 3 40 我刚刚升级到 PHP 5 3 2 但看到以下错误 PHP Warning PHP Start
  • MySql - 复制监控工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个主 从 MySql 复制 我正在寻找一个允许我监视复制的工具 查看它没有错误 检查滞后等 我更喜
  • 仅当值发生更改时如何插入数据库?

    我需要更新 替换 MySQL 数据库中的字段 但前提是它们已更改 该表包含 ID 文本字段和更改日期 用户根据更改日期通过 ID 查询数据 即 如果该日期早于用户上次查询数据的时间 则他不想要它 仅当文本字段与具有相同 ID 的现有文本字段
  • 在 C# 中,当有人插入、删除或修改记录时,如何从 MySQL 获取事件?

    我正在 WPF Net 中开发一个程序 我需要知道何时有人对数据库的任何表进行更改 这个想法是在数据库发生更改时从数据库接收一个事件 我读了很多文章 但找不到解决我的问题的方法 亲切的问候 最好的解决方案是使用消息队列 在您的应用程序向数据
  • 如何使用curl获取与使用Chrome完全相同的GET请求?

    我有一个网络 APIhttp something com api我想使用 GET 来获取响应正文 这是我的命令 curl http something com api 当然 它会失败并给出错误消息 当我使用 Chrome 并输入上面的网址时
  • 通过 PayPal REST API 示例获得折扣?

    PayPal GURUS 我需要帮助 如何插入折扣 我使用 REST API 可能是某个 可以显示代码示例吗 有什么方法可以使用 PHP REST API 发送折扣金额吗 目前 REST 支付 API 不支持折扣 您最好的选择是计算您端的折
  • PHP 电子邮件表单每次刷新页面时都会发送电子邮件

    我的 php 电子邮件每次刷新页面时都会发送电子邮件 例如 用户正在填写表单并使用发送按钮发送 这一切都很好 但如果他们刷新页面 它会再次发送包含所有相同表单信息的电子邮件 我相信这是问题代码 但不知道它是什么 require once c
  • 连接 Netbeans 和 MySQL 但出现大整数错误

    所以我正在尝试向我的 Netbeans 数据库 即 MySQL 添加新连接 但我遇到了大整数转换错误 有人可以帮助我吗 详细地 我右键单击现有的MySQL 服务器位于 localhost 3306 root 已断开连接 gt gt 选择co
  • 如何优化这个MySQL慢(非常慢)查询?

    我有一个 2 GB 的 mysql 表 包含 500k 行 我在没有负载的系统上运行以下查询 select from mytable where name in n1 n2 n3 n4 bunch more order by salary
  • Laravel 保存文件将其发布为 bin 文件

    我试图在 laravel 中保存文件 但它最终被保存为 bin 文件 file request gt file file name Carbon now gt format Y m d strtotime Carbon now file g
  • InnerHTML 什么时候立即执行?

    我希望打印这个 HTA 代码a一段时间后被替换为b 然而 它的作用是在一段时间内不打印任何内容 然后b 启用 MsgBox 行后 它会打印a第一的 看来执行的是statusinfo InnerHTML a 被推迟了 有谁能告诉我这是为什么吗
  • 在PHP中根据日期显示图像

    在我的计算机上的某个位置 我有一个 PHP 脚本 用于根据日期显示图像 这将允许我在特定日期或选定日期之间显示不同的图像 并在当前日期未列出时显示默认日期要显示的特定图像 我最近的一个硬盘驱动器出现了问题 丢失了一堆文件 我担心这个脚本就是
  • Zend Framework:检查 Zend View Placeholder 是否已设置

    如何在回显之前检查 Zend View 占位符是否已设置 因为我想在输出之前在它前面添加 I tried echo isset this gt placeholder title this gt placeholder title 但我得到
  • str_getcsv到php中的多维数组

    我有这样的 csv 值 csv data test this thing hi there this is cool dude have fun 我想获取整个 CSV 字符串并将其读入多维数组 以便得到 array array test g
  • 如何检查php字符串是否只包含英文字母和数字?

    在 JS 中我使用了这段代码 if string match A Za z0 9 但我不知道如何在 PHP 中做到这一点 Use 预匹配 http php net manual en function preg match php if p
  • 无法创建可锁定文件 - Laravel 8 和 PHP 8

    我被困在 Laravel 项目中 我已经使用 Laravel 很多年了 但从未发生过这种情况 我正在使用 Vagrant 一如既往 并且只在 PHP 8 中发生这种情况 使用 php 7 X 的其他项目不会发生这种情况 USER 和 GRO
  • 如何在不知道id的情况下从内页获取父iframe元素?

    让我们想象一下我有这样的东西 div div test html 是空页面 自定义hash属性始终具有不同的值 出于安全原因两个页面位于同一域 iframe 元素的数量和顺序是随机的 我的问
  • CakePHP 与 Bootstrap(来自 Twitter)

    我是 CakePHP 的新手 我想知道一种在与蛋糕结合的布局中使用 Twitter 的 Bootstrap 的方法 我主要关心的是让 Form Helper 继续正常运行 因为我认为它使用预先配置的 CSS 类 如果我更改默认的 css 我
  • PHP - 获取类公共变量?

    请考虑下面的代码 class A public function construct class B extends A public a a public b b public c c 如何从父类中获取 B 类的公共变量而不确切知道它们是
  • WordPress:wpdb->插入与wpdb->准备(wpdb->查询(“INSERT

    我想知道 WordPress 的插入功能是否也向数据添加斜杠 如果没有 准备查询方法似乎可以更好地防止 SQL 注入 我尝试在 codex api 中查找问题 然而 它似乎没有记录 谢谢 这个问题有点老了 自从提出这个问题以来 法典可能已经

随机推荐

  • 在纯文本 div 中插入新行

    我正在使用一个 CMS 它只允许特定 div 中的文本 HTML 例如 br 被解析为 lt br gt 对于 Unicode HTML 代码 例如 amp 会产生 and x00040 会产生 但它似乎不允许换行 回车 我怎样才能把一个
  • PyBind11 析构函数未调用?

    我有一个c 类包裹着PyBind11 问题是 当Python脚本结束c destructor不会被自动调用 这会导致不整齐的退出 因为网络资源需要由析构函数释放 作为解决方法 有必要显式删除Python反对 但我不明白为什么 请有人解释一下
  • 文本环绕段落中居中的图像

    例如 text text text text text text text text text text text text text text text text text text text text text text text te
  • 用汇编语言将 2 个数字相加并打印结果

    我需要有关如何添加两个数字然后打印结果的帮助 这是我的代码 MODEL SMALL STACK 200H DATA NUM1 DB 12 NUM2 DB 3 VAL DB MSG1 DB The sum is CODE BEGIN PROC
  • 如何在执行之前打印每个命令? [复制]

    这个问题在这里已经有答案了 设置在执行之前打印每个命令的 Bash 脚本的最佳方法是什么 这对于调试目的来说非常有用 我已经尝试过这个 CMD my command params gt stdout txt 2 gt stderr txt
  • 更改vue路由器路由而不更改URL

    在我的前端中 我想将用户重定向到错误视图 以防初始化出错 为此 我准备了一个可以通过特定路径调用的特殊错误视图 为了改善用户体验 我不想将 url 替换为类似的内容 error 但我还是想利用vue router 您知道如何实现这一目标吗
  • 如何在预览中构建带有注释的 swiftui 类 mainactor

    所以 我有一个名为设置的类 我在所有地方都使用它 并且特别希望其他视图在内容更改时做出反应 我用 MainActor 注释了它 当运行应用程序时 一切正常 但是 在预览中我只是尝试创建一个实例 struct ContentView Prev
  • 如何在 stackNavigator 屏幕内水平滑动?

    我正在尝试在同一屏幕的不同屏幕之间创建滑动导航StackNavigator 当我设定swipeEnabled true in navigationOptions 我的应用程序宁愿在不同的选项卡之间导航 我宁愿想在同一个堆栈中导航Screen
  • 重新排列数据框中的行

    我在 R 中有一个数据框 如下所示 有两列 ID phone number Mark 866458 Paul 986564 Jack 987543 Mary 523422 我想要这种只有一列的输出 Mark 866458 Paul 9865
  • 在 for 循环和条件语句中添加到 scala 映射

    我收到一条错误消息 错误 类型参数 Any 不符合特征 Cloneable 的类型参数边界 A 具体来说 var M mutable Map Int mutable Set Int for i lt 1 to 100 j lt 1 to 1
  • knockout.js afterRender 是如何工作的?

    Knockout js 的 afterRender 的文档我不清楚 它的目的是什么以及我们如何使用它 主要的使用示例有哪些 昏死渲染后每次复制 foreach 块并将其插入到文档中时都会调用 无论是在 foreach 首次初始化时 还是在稍
  • Google 可视化图表未显示第一列

    我在使用 Google Visualization API 时遇到问题 图表中的某些数据未显示 该图表相当简单 有 4 列和两行 http savedbythegoog appspot com id ae0853b788af3292b554
  • “光标”选项是必需的,来自每个聚合的错误

    我从特定 NodeJS 应用程序的每个 mongoose 聚合中收到 The cursor option is required 错误 但在同一系统中 具有猫鼬聚合的其他应用程序运行良好 解决办法是什么 顺便说一句 相同的应用程序在其他系统
  • 在单个应用程序上下文中定义两个相同类的 bean

    如果我定义同一类的两个 bean 并且没有给出任何范围 那么将创建多少个类的实例 例如 在 applicationContext xml 中
  • 我可以从我的网页启动适用于 Google Chrome 网络应用程序的 VNC 查看器吗?

    我正在构建一个 Web 服务 为远程计算机提供 VNC 连接 目前我正在使用一个名为 novnc 的项目将 VNC 嵌入到我的网页的元素中 然而 它非常慢 尤其是网络浏览器 eclipse等 然而 当我尝试 novnc 发布的 VNC Vi
  • 复制粘贴到 Python 交互式解释器和缩进中

    这段代码 文件test py if 1 print foo print bar 可以成功执行execfile test py or python test py 但是当尝试将其复制粘贴到 Python 解释器中时 File
  • 指定的任务可执行位置“...\packages\Microsoft.Net.Compilers.1.3.2\build\..\tools\csc.exe”无效

    我将代码从 TFS 下载到了 C 上的一个新文件夹 但编译器似乎遇到了问题 我删除了 suo 文件 但仍然有同样的问题和 68 个警告 因为我从未遇到过这样的问题 所以我不知道需要在此处发布哪些信息来解决它 这就是我在错误列表中看到的内容
  • MSVC:显式模板实例化失败,而隐式实例化成功

    我刚刚遇到了 MSVC 版本 12 更新 5 的问题 如果模板函数具有通过 SFINAE 禁用的重载 则显式实例化模板函数会失败 但是 调用该函数 从而隐式实例化它 是有效的 示例代码 include
  • 如何使用Postman将对象上传到Firebase Storage进行测试?

    如何使用 postman 将图像上传到 Firebase 云存储以进行测试 在这里 我们将尝试使用以下命令将图像上传到 Firebase Storage 简单上传请求在谷歌云存储 JSON API 1 您需要在 FireBase 控制台创建
  • PHP 简单 HTML DOM 解析器的字符编码问题

    我正在使用 PHP 简单 HTML DOM 解析器http simplehtmldom sourceforge net 从其他域获取页面标题 元描述和元标签等数据 然后将其插入数据库 但我在编码方面遇到了一些问题 问题是我没有从那些非英语网