commocore / petscii
将文本转换为与 PETSCII 兼容的格式(在 Commodore 8 位计算机上使用)
Requires
- php: >=5.3.0
- behat/transliterator: ^1.1
Requires (Dev)
- phake/phake: ^2.3
- phpmd/phpmd: ^2.4
- phpunit/phpunit: ^5.4
- squizlabs/php_codesniffer: ^2.6
README
Petscii 是一个小巧的 PHP 库,它允许以 PETSCII 格式进行文本渲染。它允许原始 8 位 Commodore 设备(或仿真器)上的浏览器正确显示您的网站。
- 它将任何文本转换为 PETSCII 格式(PET 标准信息交换码,基于 ASCII 的字符集)。
- 它检测 PETSCII 浏览器,允许为这类浏览器定制网站布局。
此软件包在 www.commocore.com 网站上使用。
转换
- 所有非 ASCII 字符都转换为基本 ASCII-96。
- 所有换行标签的变体(例如
<br />
)都转换为<br>
。 - 在 Contiki 中,英镑符号转换为相应的 PETSCII 字符
CHR$(92)
。
支持的浏览器
注意:PETSCII 格式在 Commodore 商用机器(如 VIC-20、C64、C128、CBM-II、Commodore Plus/4、C16 和 C116)中使用。可以使用如 64NIC+、The Final Ethernet、RR-Net 这样的以太网卡连接到互联网。
Petscii 软件包已在以下 Commodore 64 浏览器上进行了测试。可以添加用户定义的浏览器到 Petscii。
Contiki 网络浏览器
一个带有 Web 服务器和其他工具的在线 HTML 网络浏览器。为版本 2.5 设置磁盘配置器,可在 此处 获得。 Contiki 3 可在 此处 获得。
Singular 浏览器
在线 HTML 网络浏览器。有关浏览器的信息 在此。设置磁盘可在 此处 获得。
HyperLink
在线 HTML 网络浏览器。尚未测试,但 PETSCII 已检测到。更多信息 在此。
FairlightML
离线 HTML 查看器,也称为 64'er htmlreader。版本 0.99 可在 此处 获得。
通过仿真器进入万维网
您可以尝试使用 Windows(已安装 WinPcap)上的 Vice64 仿真器。更多详细信息请参阅此 Commodore Server 博客条目。
安装
通过 Composer 安装
composer require commocore/petscii
通过 Composer 自动加载(有关更多详细信息,请参阅 Composer 文档)
require_once '../vendor/autoload.php';
将 Petscii 导入到您的代码中
use Commocore\Petscii\Petscii;
用法
只有当检测到 PETSCII 浏览器时,Petscii 才会转换输入文本(基于 HTTP 用户代理)。否则,它将以未经修改的内容显示。
$content = 'Commodore 64<br />The Commodore 64 is an 8-bit home computer introduced in January 1982.<br />';
$petscii = new Petscii();
echo $petscii->render($content);
要修剪字符串开头和结尾的单个字符,请将修剪掩码字符串作为第二个参数提供(使用 PHP 的 trim()
掩码)
$content = $petscii->render($content, "\n");
要控制空白行间距,您还可以使用以下方式从字符串开头和结尾修剪 HTML 换行符(<br>
)
$result = Petscii::trimHtmlLineBreaks($this->petscii->render($text));
要检查浏览器是否支持 PETSCII
if ($petscii->isPetsciiBrowser()) {
// I'm PETSCII!
}
要返回由 HTTP 用户代理检测到的浏览器类
$browserClass = $petscii->getDetectedBrowser();
或者,要获取仅类名(不带命名空间)
$className = substr(strrchr(get_class($petscii->getDetectedBrowser()), "\\"), 1);
要添加另一个浏览器,实现Browseable
和PetsciiBrowseable
接口以定义一个新类。然后,将其作为一个数组传递给构造函数,例如:
$petscii = new Petscii(
array(
new CosmicBrowser()
)
);
测试软件包
使用Docker(带Docker Compose)进行测试。
设置
- 通过执行
make build
构建PHP Docker镜像。 - 第一次在主目录中执行
make all
以安装PHP依赖项并运行容器,或使用make composer
,然后make start
。
执行测试
Makefile包含所有可用的make命令。要测试整个项目:make test
。如果使用make phpunit-code-coverage-html
,结果将以HTML格式保存在coverage/
文件夹中。
测试可用字符
要查看特定浏览器中可用的字符,创建一个测试页面以生成以下方式的所有256个字符的列表:
echo $petscii->getTestPage();
注意事项
下划线字符兼容性
Contiki浏览器不使用下划线字符。相反,显示左箭头CHR$(95)
。您可以允许左箭头字符,或者为Contiki添加自己的代码来从文本中删除下划线。下划线在其他浏览器中显示正确,例如FairlightML HTML查看器或Singular浏览器。
如果我的网站通过HTTPS提供服务怎么办?
遗憾的是,由于技术限制,8位网络浏览器不支持HTTPS连接。通常,nginx或Apache重写规则强制HTTP连接重定向到HTTPS。解决问题的快速且简单的方法是向这些规则添加一个例外。由于8位网络浏览器数量很少,我们可以轻松创建一个黑名单来排除它们从HTTPS重写。
Apache的重定向示例
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_USER_AGENT} !(Contiki|Singular|Hyperlink) [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
nginx的重定向示例
http {
map $http_user_agent $petscii_browser {
default 0;
~(Contiki|Singular|Hyperlink) 1;
}
server {
if ($petscii_browser = 0) {
rewrite ^(.*) https://$host$1 permanent;
}
}
}
这样,如果特定的User-Agent
包含如Contiki
、Singular
或Hyperlink
之类的字符串,则不会发生HTTPS重写。请注意,设置的字符串应包含支持浏览器的最新列表。
联系我们
请使用问题跟踪器报告任何关于Petscii的问题。
如果您:
- 对Petscii有更多问题
- 使用另一个(未列出的)浏览器
- 注意到此文档中的链接不再工作
感谢您!