我想知道是否有类似于Mechanize或BeautifulSoup for PHP的类似内容?
我记得几个月前使用gettext运行一些测试,以下代码完美运行:
putenv('LANG=l33t');
putenv('LANGUAGE=l33t');
putenv('LC_MESSAGES=l33t');
if (defined('LC_MESSAGES')) // available if PHP was compiled with libintl
{
setlocale(LC_MESSAGES, 'l33t');
}
else
{
setlocale(LC_ALL, 'l33t');
}
bindtextdomain('default', './locale'); // ./locale/l33t/LC_MESSAGES/default.mo
bind_textdomain_codeset('default', 'UTF-8');
textdomain('default');
echo _('Hello World!'); // h3110 w0r1d!
Run Code Online (Sandbox Code Playgroud)
这非常有效(如果我没记错的话,在Windows XP和CentOS下),这很好,因为我可以使用任意 "语言环境",而不必担心它们是否安装在系统上.然而,这似乎不再起作用,我想知道为什么......
我可以在各种语言环境中来回切换,只要setlocale()调用没有返回false(如果系统上的语言环境可用/已安装),翻译就会显示相关内容.
这并不完美(如果我可以将gettext指向任意翻译目录而不必测试是否存在语言环境,那将是很好的),但这是可以接受的.我稍后会再进行一些测试.
setlocale()总是返回false(即使使用LC_ALL而不是LC_MESSAGES),除非我使用一些有效的Windows语言环境,例如eng,deu或ptg- 在这种情况下,语言环境似乎正确设置但翻译仍未显示.我现在无法测试,因为我已经打开了数百个标签但是我认为第一次调用该脚本会产生正确的转换(重启Apache不会起作用).
我不确定这是否与PHP Bug#49349有关.我将测试这是几个小时.
有没有办法在不同的操作系统中可靠地使用gettext扩展(不是纯PHP实现,如php-gettext或Zend Translate Adapter)(可能有自定义语言环境 …
我有点担心,如果这个功能发送的电子邮件可以在大多数电子邮件和网络邮件客户端上正确识别,特别是我最担心的是这个问题:
编辑:我不知道为什么,但代码没有正确显示,我把它提供给@ http://gist.github.com/104818
编辑2:我知道其他替代方案(图书馆)的电子邮件处理,但为了我自己的好奇心和知识,我只想知道这个代码是100%好,还是它的错误.
function Email($name, $from, $to, $subject, $message, $bcc = null, $attachments = null)
{
ini_set('SMTP', 'localhost');
ini_set('sendmail_from', $from);
$name = filter_var($name, FILTER_SANITIZE_STRING);
$from = filter_var($from, FILTER_SANITIZE_EMAIL);
$subject = filter_var($subject, FILTER_SANITIZE_STRING);
$boundary = '_Boundary_' . md5(microtime(true) . mt_rand(0, PHP_INT_MAX));
$headers = array
(
'MIME-Version: 1.0',
'Content-Type: multipart/mixed; boundary="Mixed' . $boundary . '"',
'Date: ' . date('r', time()),
'From: "' . $name . '" <' . $from . '>',
'Reply-To: "' . $name . '" …Run Code Online (Sandbox Code Playgroud) 我正在开发一个在线活动票务系统,用户可以自行打印他的票据并出现在将被扫描的事件(条形码),理想情况下,这个人会进入.我的问题是如何创建一个满足以下要求的"票证代码":
数据范围非常小,4天内只有大约20个活动,每个活动约5,000张门票(约100,000个不同的门票代码)
现在我有几个字段没有打印在故障单上,用户不知道我可以使用它来编码部分"票证代码",所以我可以使用EventId,OrderId,EventDate和一些盐来创建一个小的"哈希"部分代码(想法?),但我仍然坚持顺序或GUID(太长)的票证ID
那么关于如何做到这一点的任何想法或指示?
我有一段时间记下了我的一些代码:
/**
* Add a BCC.
*
* Note that according to the conventions of the SMTP protocol all
* addresses, including BCC addresses, are included in every email as it
* is sent over the Internet. The BCC addresses are stripped off blind
* copy email only at the destination email server.
*
* @param string $email
* @param string $name
* @return object Email
*/
Run Code Online (Sandbox Code Playgroud)
我不记得从哪里得到它(可能的来源),但这不应该与这个问题相关.基本上,每当我尝试通过SMTP发送带有BCC的电子邮件时,BCC地址都不会被隐藏 - 我已经阅读了整个RFC的SMTP协议(几年前),我认为我什么都没有丢失.
奇怪的是,如果我使用内置mail()函数向BCC发送电子邮件,一切正常,我不知道为什么 - 我想推送自己的电子邮件发件人,但我不明白这一点.
有人可以对这个黑暗的主题有所了解吗?
本手册页说:
注意:从PHP 5.4.0开始,session.entropy_file默认为
/dev/urandom或者/dev/arandom如果可用.在PHP 5.3.0中,该指令默认为空.
那么,/dev/arandom它与它有什么不同/dev/[u]random?
我很抱歉可能会提出这样一个基本问题,但在ASP.NET网站上__VIEWSTATE输入字段代表什么?
另外,有没有办法计算它的值(基于其他表单字段的值)?
我理解__VIEWSTATE,顾名思义,维护网页中表单字段值的值,但我感兴趣的是如何生成这种状态(字符串).如果我base64_decode任何__VIEWSTATE字符串,我看到的是一堆神秘的HTML.
有没有办法更好地了解究竟是什么编码?我已经搜索了过去的问题,我发现了一些可以像这样做的工具,但不幸的是它似乎没有用.
我问这个的原因是因为我访问了一个Web服务API,它为我提供了我需要使用的大部分值.但是,我还需要一个仅在表单的最后一个阶段可用的附加字段.我已经联系了网络服务提供商但不幸的是他们不会很快更新他们的API.我希望我可以使用Web服务数据预填充表单初始值,然后计算__VIEWSTATE以访问在表单的最后一个阶段显示的最后一个字段,这将使整个过程更快.
不确定我是否让自己清楚了......
Think Global,Act Local
这就是他们告诉你的,但是在我开发的所有时间里,我总是看到谷歌,微软,甲骨文等大公司以局部方式进行验证:他们知道我来自哪个国家,所以他们会尝试验证我的电话号码,邮政编码和其他详细信息,例如银行帐号以及我所在国家的正确验证方法.昨天我报名参加谷歌结账,他们甚至向我展示了我国的邮政编码格式的一些例子!
所以我的问题是,他们是如何做到的?我知道他们有成千上万的员工,但我发现很难相信他们都必须重新改造井.美国有无数的验证方法,但世界其他地方呢?我还没有看到一个开源的体面图书馆(除了非常不完整和过时的PEAR尝试之外)在各个国家的各个共同方面进行验证,例如:
有什么隐藏的资源我不知道吗?
php language-agnostic validation localization internationalization
我正在寻找一种用PHP 生成一个大随机数的方法,例如:
mt_rand($lower, $upper);
Run Code Online (Sandbox Code Playgroud)
我看到的距离越近gmp_random()但它不允许我指定下边界和上边界只有每个肢体的位数(我不知道它是什么).
编辑:Axsuuls答案似乎非常接近我想要的,非常类似于gmp_random,但在一个场景中似乎只有一个缺陷.
假设我不想在两者之间得到一个随机数:
和:
因此,如果函数名为BigRandomNumber():
BigRandomNumber($length = 31);
Run Code Online (Sandbox Code Playgroud)
这很容易返回超出指定边界的9999999999999999999999999999999.
如何使用最小/最大边界而不是长度值?
BigRandomNumber('1225468798745475454898787465154', '1225468798745475454898787465200');
Run Code Online (Sandbox Code Playgroud)
这应该返回1225468798745475454898787465 [154 .. 200]之间的随机数.
编辑:上面的帖子被删除了,这里是:
function compare($number1, $operator, $number2) {
$x = bccomp($number1, $number2);
switch($operator) {
case '<':
return -1===$x;
case '>':
return 1===$x;
case '=':
case '==':
case '===':
return 0===$x;
case '!=':
case '!==':
case '<>':
return 0!==$x;
}
}
Run Code Online (Sandbox Code Playgroud)