小编Aur*_*mas的帖子

如何在PHP中仅对URL的非ASCII符号进行URL编码,但是保留的符号是否未编码?

我有一个看起来像这样的URL(注意""符号):

http://tinklarastis.omnitel.lt/kokius-aptarnavimo-kanalus-klientui-siulo-„omnitel“-1494

我从SimplePie解析器接收它,如果这很重要.现在,如果您尝试在浏览器中访问此特定URL并从地址栏复制它,您将获得一个具有非ASCII符号百分比编码的URL :

http://tinklarastis.omnitel.lt/kokius-aptarnavimo-kanalus-klientui-siulo-%E2%80%9Eomnitel%E2%80%9C-1494

我试图了解如何在PHP中模仿相同的转换.我不能简单地使用urlencode()urlrawencode()编码非ASCII符号保留符号,而在我的情况下,保留符号(/?&等)应保持原样.

到目前为止,我只看到了将URL拆分为保留符号之间然后使用的解决方案urlencode(),但这对我来说感觉很乱,我希望有更优雅的解决方案.我已经试过的各种变化iconv(),mb_convert_encoding(),但没有成功呢.

php urlencode utf-8

12
推荐指数
2
解决办法
4694
查看次数

如何测试PHP中的变量是否是原始的

什么是最好的(最有效,最容易理解的代码等)方法来检查变量是否是PHP中的原始类型?

我应该采取"积极的"(例如,is_string() || is_int()...)方式,反之亦然,!is_array() && __is_object()..或者甚至更好的方式?

php primitive-types

9
推荐指数
1
解决办法
4128
查看次数

PHP OOP设计 - 在实现通用接口时将参数限制为特定的子类

我经常做PHP项目,旨在从网页中删除分层数据并将它们保存到数据库中(基本上,构建数据 - 考虑抓住拥有数据的政府网站,但不以结构化方式提供).每一次,我都试图提出一个允许我实现以下目标的OOP设计:

  • 如果原始网页发生变化,可以使用新的HTML解析脚本轻松替换当前的HTML解析脚本
  • 允许轻松扩展已删除和保存的数据,因为这些项目也可供其他人使用和构建.我的目标是收集"基础"数据,而其他人可能决定包含额外的东西,改变它的保存方式等.

到目前为止,我还没有找到解决方案,但最接近我得到的是这样的:

我为数据容器定义了一个抽象类,它将实现常见的树遍历函数:

abstract class DataContainer {

  protected $parent = NULL;
  protected $children = NULL;   

  public function getParent() {
    return $this->parent;
  }

  public function getChildren() {
    return $this->children;
  }             
}
Run Code Online (Sandbox Code Playgroud)

然后我有实际的数据容器.想象一下,我正在将参与议会会议的数据下载到"坐在一起的具体问题"中.我会SessionContainer,SittingContainer,QuestionContainer将所有的扩展DataContainer.

每个会话,就座和问题数据都从不同的URL中删除.留下将URL内容放在一边的机制,我只想说我需要刮刀类,它将采用容器和DOmDocument进行实际解析.所以我会定义一个这样的通用接口:

interface Scraper {
  public function scrapeData(DOMDocument $Dom, DataContainer $DataContainer);   
}
Run Code Online (Sandbox Code Playgroud)

然后,每个会话,坐着和问题都有自己的刮刀,它们实现了界面.但我也想确保他们只能接受他们想要的容器.所以它看起来像:

class SessionScraper implements Scraper {
  public function scrapeData(DOMDocument $DOM, SessionContainer $DataContainer) {
  }
}
Run Code Online (Sandbox Code Playgroud)

最后,我将有一个通用Factory类,它也实现了Scraper接口,只是将刮擦分配给相关的scraper.像这样:

public function scrapeData(DOMDocument $DOM, DataContainer $DataContainer) {
  //get …
Run Code Online (Sandbox Code Playgroud)

php oop factory-pattern

6
推荐指数
1
解决办法
583
查看次数

标签 统计

php ×3

factory-pattern ×1

oop ×1

primitive-types ×1

urlencode ×1

utf-8 ×1